Docker

2022-04-07

安装

CentOS 安装

Terminal window
1
sudo yum install yum-utils
2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3
4
# 更新和安装
5
sudo yum update
6
sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu 安装

docker 安装完成后,在使用账号非 root 的情况下,会报 permission denied 错误,此时需把账号加入到 docker 用户组后退出重新登录即可。

Terminal window
1
# 如果以前安装过,先卸载老版本
2
sudo apt-get remove docker docker-engine docker.io containerd runc
3
4
# 添加 Docker 官方源
5
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
6
# 国内阿里源
7
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
8
9
# 添加 Docker 软件源
10
echo \
11
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
12
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
13
14
# 更新和安装
15
sudo apt-get update
16
sudo apt-get install docker-ce docker-ce-cli containerd.io
17
18
# 创建 docker 用户组
19
sudo groupadd docker
20
# 把当前用户加入 docker 用户组
21
sudo usermod -aG docker $USER

使用

命令

容器

  • run : 新建并运行
Terminal window
1
docker run --rm -it --privileged=true --name fabula -v $PWD:/go/src/fabula/ -p 80:8080 golang
2
3
# 运行基本 Docker 并进入
4
docker run -it
  • exec : 在容器中执行命令
  • ps: 列出容器
    • -a: 查看所有
    • -l: 最新创建
  • kill: 关闭容器
  • images: 列出本地镜像

  • 容器自启
    • 运行前: docker run —restart=always
    • 运行时: docker update --restart=always <CONTAINER ID>

运行后修改容器配置

先切到 root 账号:

Terminal window
1
sudo su

查看要修改的容器 ID 后,停止所有容器和 Docker 服务:

Terminal window
1
# 查看容器 ID
2
docker ps
3
4
# 停止容器和 docker 服务
5
docker stop $(docker ps -aq)
6
systemctl stop docker.socket
7
systemctl stop docker.service

之后再修改对应容器配置: vim /var/lib/docker/containers/container-ID/config.v2.json

1
"MountPoints":{"/home":{"Source":"/docker","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"//docker/","Target":"/home"}}}
  • MountPoints 是挂载配置

导入导出镜像

Terminal window
1
# 导出镜像到 tar 文件
2
docker save -o <image_name>.tar <image>
3
# 导入镜像
4
docker load -i <image_name>.tar
5
# 设置名称和版本
6
docker tag <imported_image_id> python:3.12-slim

问题

报错 permission denied

Ubuntu 执行 Docker run 报错:docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

  1. gpasswd 命令把当前用户加入 docker 组

  2. 退出重新登录即可,如果无效可先重启试试

无法停止或删除

报错:cannot stop container - signaling init process caused “permission denied”

sudo aa-remove-unknown

同步时间

Terminal window
1
# 登录容器后
2
docker exec -it <containerid> /bin/sh
3
# 在里面执行
4
ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime

镜像

参考