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

通用镜像

云原生个人线路 Docker容器化-LMLPHP

Ubuntu/Debian

Alpine

专用镜像

相关理论简介 (可跳过)

容器标准

Namespace

相关命令

查看当前系统的namespace:
lsns –t <type>

查看某进程的namespace:
ls -la /proc/<pid>/ns/

进入某namespace运行命令:
nsenter -t <pid> -n ip addr

Cgroup

文件系统 Union FS

docker的文件系统

docker启动过程

OCI容器标准

Docker 12-Factor

04-09 23:59