1. 简介
作者工作时,在Windows系统下开发运行于Linux系统的程序。在Windows系统上安装Docker Desktop软件,使用基于Ubuntu系统的镜像来进行代码编译。本文所述均基于此前提。
本文只对作者工作中常用功能进行了描述,并未对Docker用法进行详述,仅供个人参考。
在Windows系统上使用Docker前请自行安装Docker Desktop软件。
软件安装成功之后,可通过命令行(docker --help或docker COMMAND --help)自行学习Docker用法:
> docker --help
> docker build --help
2. 基础知识
2.1. 镜像
Docker镜像(image)是一个只读的模板,通常基于Ubuntu等系统的基础镜像制作而成。
镜像可以用来创建Docker容器,一个镜像可以创建多个Docker容器。
2.2. 镜像仓库
用于存储Docker镜像,并提供下载和管理等功能。
仓库中镜像有多个版本,通过标签和摘要来区分。
比如ubuntu系统基础镜像有ubuntu:20.04和ubuntu:16.04等多个版本(其中20.04、16.04为标签名称)。
ubuntu:16.04版本又包含了多个用于不同架构(linux/386、linux/amd64等)的版本,相同标签下的版本可以通过版本的摘要信息来区分。
可在 Docker Hub 上查找常用的基础镜像。
2.3. 容器
使用镜像创建的运行实体,容器之间相互隔离,一个镜像可以创建多个容器。
3. 常见用法
3.1. 下载镜像
作者初入公司,第一件事儿就是搭建开发环境。编译环境已由前辈们制作成了docker镜像,无需从头搭建,不得不说确实很方便。安装好Docker Desktop后就可以下载镜像了。
【例1】下载默认版本镜像:
> docker pull ubuntu
【例2】下载指定标签版本镜像:
> docker pull ubuntu:14.04
【例3】下载指定标签指定摘要镜像:
> docker pull ubuntu:14.04@sha256:c97d63976268e6c2f3764be91e59f82009b2883d22c3dc6ff1f63e3ad6abdb05
【例4】下载指定用户名下的镜像(用户名/镜像名):
> docker pull maikebing/docker_minigui
3.2. 查看镜像列表
可通过images命令查看镜像列表:
> docker images -a
3.3. 使用Dockerfile制作镜像
除了手动基于基础镜像制作自己的镜像,还可以通过编写Dockerfile的方式来自动制作镜像。
新建一个文件夹,在文件夹下新建一个Dockerfile文件并完成编辑(Dockerfile编写方法不在此赘述),在该文件夹下执行build命令即可制作镜像,例:
> docker build -t test:1.0.0 .
其中test为镜像名,1.0.0为标签名。
3.4. 推送镜像到镜像仓库
为了让其他人能够使用你制作的镜像或者为自己的镜像做一个备份,需要将镜像推送到镜像仓库。
此处以推送到Docker Hub为例。
推送镜像之前需要登录Docker Desktop,镜像只能推送到自己有权限的仓库中,默认只对自己的仓库有推送权限。
因此需要将镜像仓库名修改为自己名下的仓库,可使用tag命令,例:
> docker tag test:1.0.0 dockerhub_account/test:1.0.0
其中dockerhub_account需要替换为Docker Hub账户,test:1.0.0需要替换为对应的镜像名和标签名。
注意:普通用户可以推送镜像到Docker Hub,不过却没有删除镜像的权限,因此如果镜像中含有敏感信息(代码或者账号密码等)推送前请先清空!!!
然后就可以使用push命令将指定镜像推送到Docker Hub:
> docker push dockerhub_account/test:1.0.0
或者将镜像所有标签版本一起推送:
> docker push -a dockerhub_account/test
3.5. 保存和加载镜像文件
从镜像仓库下载镜像速度较慢,那下载完成之后能通过内网或者U盘分享给其他人吗?
可使用save命令保存镜像到本地文件中:
> docker save -o test.tar dockerhub_account/test:1.0.0
将镜像文件分享给其他人后,可通过load命令加载镜像文件:
> docker load -i test.tar
3.6. 使用镜像运行容器
当镜像下载或者制作完成之后,就可以使用镜像来运行容器了。
可以通过Docker Desktop软件界面来运行容器(可能由于软件版本原因导致运行失败),也可以使用run命令来启动:
> docker run -p 50022:22 -itd --name=test dockerhub_account/test:1.0.0
通过-p参数映射容器端口,通过–name参数指定容器名称。
3.7. 容器管理
3.7.1. 查看容器列表
可通过container ls命令查看正在运行的容器:
> docker container ls
或者查看所有容器:
> docker container ls -a
3.7.2. 启动容器
容器停止运行之后,其中的数据会自动保存在容器中,如果需要重新启动容器,不应该从镜像运行容器,而应该在Docker Desktop软件界面启动容器,或者使用start命令:
> docker container ls -a
> docker start test
3.7.3. 打开容器终端
需要通过终端操作容器时,可在Docker Desktop软件界面打开与容器交互的终端,也可以通过attach命令打开容器终端:
> docker attach test
3.7.4. 停止容器
当使用完容器之后,需要停止容器,可在Docker Desktop软件界面操作,也可以通过stop命令:
> docker stop test
3.8. 将容器打包成镜像
为了让他人可以使用我们的容器,我们需要将容器打包成镜像,通过保存为镜像文件或者推送到镜像仓库的方式分享给他人。
通过commit命令将容器打包成镜像:
> docker commit -m 'Build compile environment.' test dockerhub_account/test:2.0.0
3.9. 文件拷贝
经常需要在容器和本地计算机之间拷贝文件,可通过cp命令来进行。
【例1】将本地计算机中的 D:\test.txt 文件拷贝到名为 test 的容器中的 /home/ 目录下:
> docker cp D:\test.txt test:/home/
【例2】将名为 test 的容器中的 /home/test.txt 文件拷贝到本地计算机中的 D:\ 目录下:
> docker cp test:/home/test.txt D:\