Docker
安装docker
基于ubuntu
更新apt包索引并安装允许apt使用HTTPS仓库的软件包
$ sudo apt-get update
$ sudo apt-get install \\
ca-certificates \\
curl \\
gnupg \\
lsb-release
添加Docker的官方GPG密钥
$ sudo mkdir -m 0755 -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
写入阿里云镜像源地址
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新apt包索引
sudo apt-get update
安装Docker Engine、containerd和Docker Compose
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
基于Centos7
#查看系统版本
cat /etc/redhat-release
#查看当前系统的内核:
uname -sr
#在 CentOS 7.x 上启用 ELRepo 仓库:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#查看可用的系统内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新主线内核版本:
yum -y --enablerepo=elrepo-kernel install kernel-ml
#设置默认内核版本
vi /etc/default/grub
修改GRUB_DEFAULT=0
#重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#卸载旧版本docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
#gcc
yum -y install gcc
yum -y install gcc-c++
#安装yum工具包
yum -y install yum-utils
#设置阿里云的stable 镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新 yum 软件包索引
yum makecache fast
#安装指定版本的 Docker(v20.10.8):
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-1:20.10.8-3.el7.x86_64 containerd.io
systemctl start docker
systemctl enable docker
#查看docker状态:
systemctl status docker
docker version
#镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://du3ia00u.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com"
],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"storage-driver": "overlay2"
}
EOF
#使之生效
systemctl daemon-reload
#重启docker
systemctl restart docker
容器操作
常见命令
docker pull image:tag
docker run 启动并创建容器
--name 容器名
--rm 退出自动删除
-it 交互
-d 后台
-p 端口映射
-v 磁盘挂载
docker start container 启动容器
docker stop container 停止
docker ps -a 查看全部容器
docker exec -it image /bin/bash 进入容器
docker inspect image 查看容器信息
docker cp local:docker 拷贝文件到容器
docker images 查看镜像
Dockerfile
FROM:指定基础镜像。
RUN:在镜像中运行命令。
CMD:指定容器启动时要运行的命令。
LABEL:为镜像添加元数据。
EXPOSE:指定容器要暴露的端口。
ENV:设置环境变量。
ADD:将文件从构建上下文或 URL 复制到镜像中。
COPY:将文件从构建上下文复制到镜像中。
ENTRYPOINT:指定容器启动时要运行的命令,可以与 CMD 配合使用。
VOLUME:创建挂载点,用于挂载外部卷。
USER:指定运行容器时要使用的用户。
WORKDIR:设置工作目录。
最佳实践
Makefile文件
# 设置项目根目录
ROOT := $(shell pwd)
# 设置编译生成的可执行文件名
BINARY := myapp
# 设置编译选项
GOFLAGS := -ldflags="-s -w"
# 设置远程仓库地址
REPO := myrepo/myapp
# 设置版本号
VERSION := 1.0.0
# 默认目标
all: build
# 编译目标
build:
go build $(GOFLAGS) -o $(BINARY) main.go
# 发布目标
release: build
tar czf $(BINARY)-$(VERSION).tar.gz $(BINARY)
# 推送目标
push: release
scp $(BINARY)-$(VERSION).tar.gz $(REPO)
# 清理目标
clean:
rm -f $(BINARY)
rm -f $(BINARY)-*.tar.gz
.PHONY: all build release push clean
扩展
构建镜像 -o 指定镜像名
docker build -t imagename .
查看镜像
docker images
登录 输入账号密码
docker login
打包
docker tag tagname your_dockerhub_name/imagename
push到dockerhub仓库
docker push your_dockerhub_name/imagename
通用镜像
Ubuntu/Debian
Alpine
专用镜像
相关理论简介 (可跳过)
容器标准
Namespace
相关命令
查看当前系统的namespace:
lsns –t <type>
查看某进程的namespace:
ls -la /proc/<pid>/ns/
进入某namespace运行命令:
nsenter -t <pid> -n ip addr