Docker 使用
配置镜像源地址
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
$ sudo systemctl daemon-reload #重新加载配置文件
$ sudo systemctl restart docker #重启 Docker 服务
常用的 Docker 服务命令
$ systemctl start docker #启动 Docker 服务
$ systemctl stop docker #停止 Docker 服务
$ systemctl restart docker #重启 Docker 服务
$ systemctl enable docker #设置开机启动 Docker 服务
$ systemctl status docker #查看 Docker 服务状态
镜像使用
拉取镜像
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- OPTIONS(可选):选项参数。
- all-tags, -a:下载指定镜像的所有标签。
- disable-content-trust:跳过镜像签名验证。
- NAME:镜像名称,通常包含注册表地址(比如 docker.io/library/ubuntu),不带注册表地址则默认从 Docker Hub 进行拉取。
- TAG(可选):镜像标签,默认为 latest。
- DIGEST(可选):镜像的 SHA256 摘要。
下载最新的 nginx 镜像可以运行 docker pull nginx 命令
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
16c9c4a8e9ee: Pull complete
de29066b274e: Pull complete
2cf157fc31fe: Pull complete
450968563955: Pull complete
9b14c47aa231: Pull complete
fd8a9ced9846: Pull complete
c96c7b918bd5: Pull complete
Digest: sha256:5ed8fcc66f4ed123c1b2560ed708dc148755b6e4cbd8b943fab094f2c6bfa91e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
如果想下载特定版本的镜像,可以在镜像名后加上标签
$ docker pull nginx:1.23
镜像标签
每个镜像可以有多个标签,通常用于区分不同版本或环境
以 nginx 镜像为例,默认情况下当我们拉取nginx镜像时,Docker 会自动使用 latest 标签,这表示最新稳定版
查看镜像
下载完成后,对应镜像会存储在本地。通过 docker images
命令可以查看本地已有的镜像列表,这个命令会显示镜像的名称
、标签
、镜像 ID
、创建时间
和大小
等信息。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 1f94323bafb2 6 days ago 198MB
可以通过 docker inspect
命令查看指定镜像详细信息,包括创建时间、环境变量、工作目录、暴露的端口等配置信息。
$ docker inspect nginx
可以使用 docker logs
命令查看正在运行的容器的日志输出
$ docker logs nginx
删除镜像
需要使用 docker rmi
加上镜像 ID 才能彻底删除镜像文件。
镜像 ID 可以通过 docker images
命令进行查看
$ docker rmi 1f94323bafb2
容器使用
创建并启动容器
在获取镜像并下载完成之后,可以通过 docker run
命令运行容器
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数说明:
- d:以后台模式运行容器
- p:端口映射,格式为 主机端口号:容器端口号,例如 80:80。
- name:指定容器名称。
- it:保持交互式终端连接。
- v:挂载主机目录到容器,格式为 -v 主机目录:容器目录。
- rm:容器停止时自动删除容器。
- env 或 -e:设置环境变量,格式为 --env 变量名=变量值。
- network:指定容器的网络模式。
- restart:容器的重启策略。
- u:指定用户运行,格式为 -u 用户名。
如果我们想要启动一个 nginx 容器
$ docker run -d -p 80:80 --name nginx-container nginx
通过以上命令,Docker 会进行以下操作:
- 使用指定的 nginx 镜像构建容器。
- 允许容器在后台运行。
- 将容器的 80 端口映射到主机的 80 端口上。
- 指定容器名称为 nginx-container。
- 启动容器。
在容器启动后,通过主机的 IP 地址就能看到 nginx 的默认欢迎页面了。
重新启动已经终止的容器
如果容器因为某种原因停止运行,可以使用 docker start 容器ID
命令重新启动它
终止容器
要终止正在运行的 Docker 容器,可以使用 docker stop
命令
$ docker stop nginx-container
nginx-container
查看容器
1 使用 docker ps
命令可以查看当前正在运行的容器
这个命令会显示容器的 ID
、名称
、使用的镜像
、创建时间
、状态
和端口映射
等信息。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx-container
2 docker ps -a
命令可以查看所有容器,包括已经停止的容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx-container
b2c3d4e5f6a1 redis:alpine "docker-entrypoint.s…" 2 days ago Exited (0) 2 days ago redis-test
3 docker inspect
命令可以查看容器的详细信息,返回 JSON 格式的数据,包含容器的配置、网络设置、挂载卷等完整信息。
$ docker inspect nginx-container
4 docker logs
命令可以查看容器的日志输出。这个命令加上 -f
参数可以实时查看日志输出。
$ docker logs nginx-container
$ docker logs -f nginx-container
5 docker stats
命令可以实时查看容器的资源使用情况,包括 CPU、内存、网络和磁盘 I/O。
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1b2c3d4e5f6 nginx-container 0.00% 2.5MiB / 1.952GiB 0.13% 1.45kB / 648B 0B / 0B 2
容器的导出和导入
导出容器可以使用 docker export 命令,这个命令会将容器的文件系统打包成 tar 归档文件,但不包含容器的元数据、网络配置或卷信息。
$ docker export -o nginx-container.tar nginx-container
将名为 nginx-container 的容器导出到当前目录下的 nginx-container.tar 文件中
通过 docker import 命令重新导入为镜像,导入时需要指定镜像名称
和标签
$ docker import nginx-container.tar my-nginx:v1
导入命令会创建一个名为 my-nginx、标签为 v1 的新镜像
删除容器
当容器不再需要时,可以使用 docker rm 命令将其删除,这个命令需要指定容器 ID 或容器名称
docker rm nginx-container #会删除名为 nginx-container 的容器
注意:如果容器正在运行,直接删除会失败,需要先使用 docker stop 停止容器,或者添加 -f 参数强制删除运行中的容器。
# 查看容器列表
$ docker ps # 查看正在运行的容器列表
$ docker ps -l # 查看最近一次创建的容器
$ docker ps -q # 查看正在运行的容器 ID 列表
$ docker ps -a # 查看全部容器(包括已经停止的容器)
$ docker ps -aq # 查看全部容器 ID 列表
# 停止运行的容器
$ docker stop my_container # 使用容器名停止
$ docker stop container_id # 使用容器 ID 停止
# 启动已停止的容器
$ docker start my_container # 容器名
$ docker start container_id # 容器 ID
$ docker start `docker ps -aq` # 使用容器 ID 启动多个已停止的容器
# 删除容器
$ docker rm my_container # 用容器名删除
$ docker rm container_id # 用容器 ID 删除
$ docker rm `docker ps -aq` # 删除多个未运行的容器, 运行中的无法删除
# 进入容器(正在运行的容器才可以进入)
$ docker exec -it my_container /bin/bash # 使用容器名
$ docker exec -it container_id /bin/bash # 使用容器 ID
# 查看容器信息
$ docker inspect my_container # 容器名
$ docker inspect container_id # 容器 ID