0%

Docker 使用新手教学


应对情况:在项目合作过程,从合作团队收到他们已经封装好的镜像,其中包含 environment_setting.py / docker-compose.yml / Dockefile 等文件,因此本文主要聚焦 Docker 镜像使用,不包含 Docker 镜像制作等内容。

环境:Linux Ubuntu 18


Docker 安装

检查虚拟机上是否预装好 Docker

很多租赁或者购买的云虚拟机上都已经提前装好了 docker-enginedocker-compose ,所以可以使用下面的命令行先看下 Docker 的安装情况和版本:

$ docker --version  # 检查当前版本
$ docker-compose --version # 检查 docker-compose 版本

如果版本符合你的需求,可以直接试试运行 “Hello-World” 镜像:

$ sudo service docker start && docker run hello-world

如果 Docker 可以正常工作,输入完命令后会出现:

“Hello from Docker! This message shows that your installation appears to be working correctly.”


安装 Docker

相反,如果 Docker 没有安装或者版本不符合你的需求,可以按照以下方法安装。

(主要参考官方文档: https://docs.docker.com/engine/install/ubuntu/)

移除之前的版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
设置 repository
$ sudo apt-get update

$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg \
--dearmor -o /etc/apt/keyrings/docker.gpg

$ sudo apt-get update
$ sudo apt-get install \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin

$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

基本上到这里 Docker 就已经安装成功,可以使用第一步中的命令,再次进行检查。有些时候,可能需要安装某个特殊版本的 Docker(例如我之前曾遇到过预安装的 docker-engine 和 docker-compose 版本不对应的情况),那么可以参考下方的命令。

安装指定版本的 docker-composer
$ curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-\
`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

安装镜像

$ python environment_setting.py [options]  # 基于本地文件进行镜像安装
$ docker pull ubuntu # 从网上获取镜像

输入上方命令后,需要一些时间搭建镜像。完成后,你可以使用下面命令查看镜像是否安装成功。

$ docker images ls

如果镜像搭建成功,你将可以看到你的 镜像名称(image_name)镜像ID(image_ID)。这在后面将会用到。

另外,如果在搭建过程中出现任何错误,你可以通过以下命令删除你的镜像。

$ docker rmi <image_ID or image_name>  # 删除某个镜像
$ docker rmi $(docker images -q) # 一次删除所有镜像,慎用

创建和使用容器(container)

基于某个镜像新建一个容器:

$ docker run -it <image_ID> /bin/bash  # 最简单的方式
$ docker run -it -v <host-folder>:<container-folder> <image_ID> /bin/bash # 虚拟机文件夹同步容器中文件夹
$ docker run -it --gpus all <image_ID> /bin/bash # container 中的 GPU 启动不了的情况

正常创建后,你会看到 root@container_ID。这边的 container_ID 是自动生成的,后面会遇到。

如果你需要用到 conda 环境和 conda 命令:

$ conda init bash  # 在容器内部
$ exit # 在容器内部

$ docker exec -it <container_ID> /bin/bash # 重新进入容器
$ conda activate my_conda_env # 可使用 conda 命令

另外,任何时候你想查看容器状态或者对容器进行管理,可以参考下方的命令。

$ docker ps  # 查看正在运行的容器
$ docker ps -a # 查看所有容器

$ docker start <container_ID> # 开始容器
$ docker stop <container_ID> # 停止容器
$ docker kill {container_ID} # 强行停止容器
$ docker restart <container_ID> # 重启容器
$ docker attach <container_ID> # 在当前 terminal 进入某个正在运行的容器

$ docker rm -f <container_ID> # 删除容器
$ docker rm -f $(docker ps -aq) # 删除所有容器

其他一些可能会用到的命令

$ docker inspect -f '{{.Id}}' <container_ID>  # 获取到容器的 container_long_ID
$ docker cp <host_path> <container_long_ID>:<container_path> # 在 host 和容器间传输文件