1、Docker 安装
安装配置Docker的方法步骤,以及配置Docker镜像加速的方法,可以参考如下文档,
参考文档:
Linux Raspberry Pi Docker 安装与配置
2、Docker 镜像
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。image 是二进制文件。一个 image 文件可以通过继承另一个 image 文件,在结合实现需求进行自定义配置。一般来说,为了节省时间,应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。image 文件制作完成后,可以上传到Docker Hub。Docker 的官方仓库 Docker Hub 是最重要,最常用的 image 仓库。
1)搜索镜像
docker search <镜像名>
例如,
搜索linux相关镜像:
docker search linux
2)获取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
选项说明
选项 | 作用 |
-a, --all-tags | 拉取所有 tagged 镜像 |
--disable-content-trust | 忽略镜像的校验,默认开启 |
-q, --quiet | 概要输出 |
--platform string | 若服务支持多平台,这里可以设置平台 |
TAG
:标签,不写的话默认是 latest 最新版
@DIGEST
:不可变的标识符。
例如,
$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull complete
fd2731e4c50c: Pull complete
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04
其中@DIGEST
就是上面描述中的sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
,则拉取可以使用如下命令:
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
3)列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
使用docker images
可以列出已经下载的镜像,参数如下:
-a, --all | 列出所有镜像 (默认隐藏中间层镜像) |
--digests | 显示镜像的摘要信息 |
-f, --filter <filter> | 显示满足条件的镜像 |
--format <string> | 使用 Go 模板语法列出镜像 |
--no-trunc | 不截断输出,显示完整镜像信息 |
-q, --quiet | 只显示镜像 ID |
4)删除镜像
docker rmi <镜像名>
例如,
docker rmi ubuntu:16.04
3、Docker 容器
Docker 容器是根据 image 文件生成的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
1)创建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参考选项如下表:
-t | 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上 |
-i | 附加到容器的标准输入(进入交互模式) |
-d, --detach | 在后台启动容器 |
--name | 为容器指定一个名称 |
-P | 随机端口映射 |
-p | 指定端口映射。如 -p 8080:80 表示将宿主机的8080端口映射到容器的80端口 |
--net | 指定网络模式,该选项有以下可选参数: --net=brige:默认选项,表示连接到默认的网桥 --net=host:容器使用宿主机的网络(该模式下-p参数无效) --net=container:<容器名称或id>:让容器使用已有容器的网络配置 --net=none:不使用该容器的网络,用户可以自定义网络配置 |
例如,
docker run -d -p 8080:80 --name=mynginx nginx
2)停止容器
docker stop <容器名称或id>
-t, --time <int>
:停止前等待的时间,默认为 10(单位:秒)
例如,
docker stop mynginx
3)启动停止的容器
docker start <容器名称或id>
参数如下:
-a, --attach
:附加到容器的标准输出
-i
:附加到容器的标准输入(进入交互模式)
例如,
docker start mynginx
4)重启容器
docker restart <容器名称或id>
参数如下:
-t, --time <int>
:停止前等待的时间,默认为 10(单位:秒)
例如,
docker restart mynginx
5)进入容器
进入容器并启动bash命令:
docker exec -it <容器名称或id> /bin/bash
例如,
docker exec -it mynginx /bin/bash
6)删除容器
docker rm <容器名称或id>
参数如下:
-f, --force
:强制删除正在运行的容器(使用 SIGKILL)
-l, --link
:删除指定的链接
-v, --volumes
:删除与容器关联的卷
例如,
删除mynginx容器:
docker rm mynginx
删除所有停止的容器:
docker rm $(docker ps -a -q)
4、传输文件
Docker容器和主机之间可能需要传输文件,可以使用docker cp
实现相互文件传输。
1)将容器文件拷贝至主机
docker cp <容器名称或id>:<容器中文件路径> <宿主机中目标路径>
例如,
docker cp mynginx:/tmp/cjavapy.json ~/dir
2)将主机文件拷贝至容器
docker cp <文件路径> <容器名称或id>:<容器中文件目标路>
例如,
docker cp ~/dir/index.cfg mynginx:/tmp
5、hello-world实例
使用docker run
命令具有自动拉取hello-world 镜像。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。可以先使用docker pull
拉取镜像。
$ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
输出上面提示之后,hello-world容器会停止运行,容器自动终止。
注意:docker logs
命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run
命令运行容器时,没有使用-it
参数,就要用这个命令查看输出。