docker命令
wsargent/docker-cheat-sheet: Docker Cheat Sheet (github.com)
容器
Lifecycle
| 命令 | 说明 | 例子 |
|---|---|---|
docker create | creates a container but does not start it. | docker create --name myubuntu ubuntu |
docker rename | allows the container to be renamed. | docker rename oldname newname |
docker run | creates and starts a container in one operation. | docker run --name mynginx -p 80:80 -d nginx |
docker rm | deletes a container. | docker rm mycontainer |
docker update | updates a container's resource limits. | docker update --cpu-shares 512 mycontainer |
docker run: 通常,如果您不使用任何选项运行容器,它将立即启动并停止。如果您想保持其运行状态,可以使用命令docker run -td container_id -t 选项来分配一个伪终端会话,-d选项自动分离容器(在后台运行容器并打印容器 ID)。
如果您想要一个临时容器,docker run --rm 将在停止后移除容器。在运行mysql客户端的时候,可以使用该参数 docker run -it --rm mysql:5.7 mysql -h172.17.0.2 -uroot -p
如果您想将主机上的目录映射到 Docker 容器中 docker run -v $HOSTDIR:$DOCKERDIR
如果您想删除与容器关联的卷,删除容器必须包括参数-v, docker rm -v
在 Docker 1.10 中,还提供了针对单个容器的日志驱动程序。要使用自定义日志驱动程序(例如 syslog)运行 Docker 。使用命令 docker run --log-driver=syslog
另一个有用的选项是 --name,因为当您在运行命令中指定时名称,这将允许您通过使用创建容器时指定的名称来启动和停止容器。
Starting and Stopping
| 命令 | 说明 | 例子 |
|---|---|---|
docker start | starts a container so it is running. | docker start mycontainer |
docker stop | stops a running container. | docker stop mycontainer |
docker restart | stops and starts a container. | docker restart mycontainer |
docker pause | pauses a running container, "freezing" it in place. | docker pause mycontainer |
docker unpause | will unpause a running container. | docker unpause mycontainer |
docker wait | blocks until running container stops. | docker wait mycontainer |
docker kill | sends a SIGKILL to a running container. | docker kill mycontainer |
docker attach | will connect to a running container. | docker attach mycontainer |
Info
| 命令 | 说明 | 例子 |
|---|---|---|
docker ps | shows running containers. | docker ps |
docker logs | gets logs from container. (Available for json-file and journald in 1.10) | docker logs -f mycontainer |
docker inspect | looks at all the info on a container (including IP address). | docker inspect mycontainer |
docker events | gets events from container. | docker events |
docker port | shows public facing port of container. | docker port mycontainer |
docker top | shows running processes in container. | docker top mycontainer |
docker stats | shows containers' resource usage statistics. | docker stats |
docker diff | shows changed files in the container's filesystem. | docker diff mycontainer |
docker ps -a显示正在运行和已停止的容器。
docker stats --all 显示所有容器的列表,默认只显示正在运行的。
Import / Export
| 命令 | 说明 | 例子 |
|---|---|---|
docker cp | copies files or folders between a container and the local filesystem. | docker cp mycontainer:/path/to/file /local/path |
docker export | turns container filesystem into a tarball archive stream to STDOUT. | docker export my_container | gzip > my_container.tar.gz |
Executing Commands
| 命令 | 说明 | 例子 |
|---|---|---|
docker exec | to execute a command in container. | docker exec -it foo /bin/bash |
要进入一个正在运行的容器,将一个新的 shell 进程附加到名为 foo 的运行中的容器上,使用docker exec -it foo /bin/bash
Image
Lifecycle
| 命令 | 说明 | 例子 |
|---|---|---|
docker images | shows all images. | docker images |
docker import | creates an image from a tarball. | cat my_container.tar.gz | docker import - my_image:my_tag |
docker build | creates image from Dockerfile. | docker build -t myimage:0.0.1 . |
docker commit | creates image from a container, pausing it temporarily if it is running. | docker commit mycontainer mynewimage |
docker rmi | removes an image. | docker rmi myimage |
| docker image prune | 清除未使用的镜像 | |
docker load | loads an image from a tar archive as STDIN, including images and tags (as of 0.7). | docker load < my_image.tar.gz |
docker save | saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7). | docker save my_image:my_tag | gzip > my_image.tar.gz |
export import 和 save load区别?
-
export 导出丢失镜像所有的历史记录和元数据信息。
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
-
save 保存没有丢失镜像的历史,可以回滚到之前的层。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
Info
| 命令 | 说明 | 例子 |
|---|---|---|
docker history | shows history of an image. | docker history myimage |
docker tag | tags an image to a name (local or registry). | docker tag myimage myregistry/myimage:mytag |
NetWorks
安装 Docker 时,它会自动创建 3 个网络接口(桥接、主机、无网络)。
- bridge
如果不指定,新创建的容器默认将连接到bridge网络。 默认情况下,新的容器会启动到桥接网络中,宿主机可以ping通容器ip,容器中也能ping通宿主机。容器之前只能通过ip地址相互访问,由于容器的ip会随着启动的顺序发生变化,因此不推荐使用ip访问。
docker run -it --rm busybox 可以使用该命令去进入一个busybox容器,该容器连接到默认网络中,可以使用ping命令测试其他容器,和宿主机的连通。
- host
容器与宿主主机共享网络,不需要映射端口即可通过宿主主机IP访问。主机模式网络可用于优化性能,在容器需要处理大量端口的情况下,它不需要网络地址转化(NAT),并且不会为每个端口创建“用户空间代理”。
- none
禁用容器中的所有网络,在启动容器时使用。
Lifecycle
| 命令 | 说明 | 例子 |
|---|---|---|
docker network create | Create a new network (default type: bridge). | docker network create --driver bridge mynetwork |
docker network rm | Remove one or more networks by name or identifier. | docker network rm mynetwork |
Info
| 命令 | 说明 | 例子 |
|---|---|---|
docker network ls | List networks | docker network ls |
docker network inspect | Display detailed information on one or more networks. | docker network inspect mynetwork |
Connection
| 命令 | 说明 | 例子 |
|---|---|---|
docker network connect | Connect a container to a network | docker network connect mynetwork mycontainer |
docker network disconnect | Disconnect a container from a network | docker network disconnect mynetwork mycontainer |
docker network create my-net 创建一个网络。
docker network connect my-net innolight-blazor 将创建的网络和容器相连接,

如果docker run 直接使用--network 之后,将不会添加默认的网络。
数据存储
将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。 将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂载到容易里,就可以快速的恢复。
存储方式
Docker 提供了以下存储选项
- volumn 卷存储在主机文件系统分配一块专有存储区域,由Docker(在Linux上)管理,并且与主机的核心功能隔离。非 Docker 进程不能修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方式。
数据卷的优势:
- 卷可以在多个正在运行的容器之前共享数据,仅当显示删除卷时,才会删除卷。
- 当你想将容器数据存储在外部网络存储上或者云提供商上,而不是本地。
- 卷更容易备份或者迁移,当你需要备份,还原数据或者将数据从一个Docker主机前提到另一个Docker主机时,卷是更好的选择。
- bind mount 绑定挂载 绑定挂载可以将主机文件系统上目录或文件装载到容器中,但是主机上的非 Docker 进程可以修改它们,同时在容器中也可以更改主机文件系统,包括创建、修改或删除文件或目录,使用不当,可能会带来安全隐患。
绑定挂载适用场景:
- 将配置文件从主机共享到容器
- 在Docker主机上的开发环境和容器之前共享源代码或者编译目录。
- tmpfs 临时挂载 tmpfs挂载仅存储在主机系统的内存中,从不写入主机系统的文件系统。当容器停止时数据将被删除,
docker run -d -it --tmpfs /tmp nginx:1.22-alpine
Bind Mount
docker run --name some-mysql -v D:/mysql/config/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro -v D:/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
使用该命令,创建一个mysql容器,并且指定配置文件D盘的mysq/config/mysql.cnf 和数据为D盘mysq/data
docker exec some-mysql -it /bin/bash 来确定下配置项。
Volumes
Docker 卷是自由浮动的文件系统。它们不必连接到特定的容器。您可以使用从数据容器挂载的卷来实现可移植性。从 Docker 1.9.0 开始,Docker 引入了命名卷,取代了数据容器。考虑使用命名卷来实现,而不是数据容器。
因为卷是隔离的文件系统,所以它们经常被用来存储临时容器之间的计算状态。也就是说,你可以从一个配方中运行一个无状态的临时容器,然后将其删除,然后再次创建一个临时容器的实例,从上一个容器停止的地方继续执行。
Lifecycle
| 命令 | 说明 | 例子 |
|---|---|---|
docker volume create | Create a new volume. | docker volume create myvolume |
docker volume rm | Remove one or more volumes. | docker volume rm myvolume |
Info
| 命令 | 说明 | 例子 |
|---|---|---|
docker volume ls | List all volumes. | docker volume ls |
docker volume inspect | Display detailed information on one or more volumes. | docker volume inspect myvolume |
Exposing ports
-p 参数使得容器端口映射到主机端口(仅使用本地主机接口)。
docker run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT \
--name CONTAINER \
-t someimage
您可以使用 EXPOSE 在运行时告诉 Docker 容器监听指定的网络端口
EXPOSE <CONTAINERPORT>
请注意,本身不会暴露端口 - 只有会这样做。