Docker学习笔记
基础
拉取镜像
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体的选项可以通过 docker pull --help
命令看到,这里我们说一下镜像名称的格式。
- Docker 镜像仓库地址:地址的格式一般是
<域名/IP>[:端口号]
。默认地址是 Docker Hub(docker.io
)。 - 仓库名:如之前所说,这里的仓库名是两段式名称,即
<用户名>/<软件名>
。对于 Docker Hub,如果不给出用户名,则默认为library
,也就是官方镜像。
运行镜像
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数及其说明
-d
:后台运行容器(即 detached 模式)。-it
:交互模式运行容器,通常和-i
(保持标准输入)和-t
(分配伪终端)一起使用。--name
:为容器指定一个名称。-p
:端口映射,用于将宿主机的端口映射到容器内的端口。-v
:数据卷挂载,用于将宿主机目录挂载到容器中。--rm
:容器退出后自动删除容器。-e
:设置环境变量。--network
:指定容器使用的网络。--restart
:容器的重启策略,例如always
、on-failure
。
例如:
$ docker run -d --name mynginx -p 8088 nginx
进入容器
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
CONTAINER
:要执行命令的容器的名字或 ID。COMMAND
:在容器内执行的命令。
常用参数
-i
:保持标准输入,允许你与容器交互。-t
:分配一个伪终端。通常-it
会一起使用,使得你能以交互模式在容器内执行命令。-d
:在后台运行命令。-u
:指定运行命令的用户,默认是root
。
例如:
$ docker exec -it mycontainer /bin/bash
停止容器
$ docker stop [OPTIONS] CONTAINER [CONTAINER...]
启动容器
$ docker start [OPTIONS] CONTAINER [CONTAINER...]
删除容器
$ docker rm CONTAINERID
-f
:强制删除
复制容器文件
docker cp [OPTIONS] SOURCE_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SOURCE_PATH DEST_PATH
SOURCE_PATH
:源文件或目录的路径,可以是宿主机上的路径,也可以是容器中的路径。CONTAINER:DEST_PATH
:目标容器及其路径,表示将文件复制到容器内。CONTAINER:SOURCE_PATH
:表示从容器中的路径复制到宿主机。DEST_PATH
:目标文件或目录的路径,表示将文件复制到宿主机上。
常见用法
1. 将文件从宿主机复制到容器中
docker cp /path/to/file.txt mycontainer:/path/in/container/
- 这条命令会将宿主机上的
/path/to/file.txt
文件复制到容器mycontainer
中的/path/in/container/
路径下。
2. 将目录从宿主机复制到容器中
docker cp /path/to/directory/ mycontainer:/path/in/container/
- 将宿主机的
/path/to/directory/
目录及其内容复制到容器mycontainer
的/path/in/container/
路径下。
3. 将文件从容器中复制到宿主机
docker cp mycontainer:/path/in/container/file.txt /path/on/host/
- 这条命令将容器
mycontainer
中的/path/in/container/file.txt
文件复制到宿主机的/path/on/host/
路径下。
4. 将容器内的目录复制到宿主机
docker cp mycontainer:/path/in/container/ /path/on/host/
- 将容器
mycontainer
中的/path/in/container/
目录及其内容复制到宿主机的/path/on/host/
路径下。
注意事项
- 路径末尾的斜杠:当复制目录时,源路径末尾带有
/
的含义是“复制目录的内容”,而没有/
则是复制整个目录及其内容。例如,/path/to/directory/
和/path/to/directory
在复制时会有不同的行为。 - 目标路径存在性:如果目标路径已经存在,并且是一个目录,那么文件或目录将被复制到该目录中。如果目标路径不存在,Docker 会创建它
数据卷
创建数据卷
$ docker volume create my-vol
查看所有数据卷
$ docker volume ls
DRIVER VOLUME NAME
local my-vol
查看指定 数据卷
的信息
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
启动一个挂载数据卷的容器
$ docker run -d -P
--name web
# -v my-vol:/usr/share/nginx/html
--mount source=my-vol,target=/usr/share/nginx/html
nginx:alpine
删除数据卷
$ docker volume rm my-vol
无主的数据卷可能会占据很多空间,要清理请使用以下命令
$ docker volume prune
容器互联
新建网络
$ docker network create -d [type] [name]
常见的网络类型有:
- bridge:默认的本地网络,适用于单主机容器间的通信。
- host:容器共享主机的网络堆栈,适用于性能要求较高的场景。
- none:没有网络,适用于需要完全隔离的容器。
- overlay:适用于多主机之间的容器通信,通常用于 Docker Swarm。
查看网络
$ docker network ls
查看网络详细信息
$ docker network inspect my_network
连接容器到网络
使用 --network
参数将容器连接到特定的网络:
docker run -d --name my_container --network my_network nginx