Docker基础-docker常用命令

Docker Command

介绍一些docker常用的命令

Docker container management

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-t 分配一个terminal窗口
-i 允许和容器进行交互
-d 后台运行一个容器
-P 将容器内部的所有exposed的端口映射为宿主机上的随意端口
-p 将容器内部的端口绑定到宿主机上指定的端口
后面跟<port> :表示将容器内部的这个端口隐射到宿主机上的随意端口
后面跟<port1>:<port2> :表示将<port2容器内部端口>隐射到<port1宿主机端口>
--name 为容器命名
--net 为容器指定网络
-v 为容器挂载卷组
--volume-driver 指定容器卷组的驱动

$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
$ docker run -d -P --name web training/webapp python app.py
$ docker run -d -p 80:5000 trainning/webapp python app.py
$ docker run ubuntu /bin/echo "Hello world"
$ docker run -ti ubuntu /bin/bash
1
2
3
4
#启动容器,可同时启动多个容器
docker start [OPTIONS] CONTAINER [CONTAINER...]

$ docker start 215b04f73370
1
2
3
4
#停止容器运行,可同时停止多个容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]

$ docker stop 215b04f73370
1
2
3
4
#重启重启,可同时重启多个容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]

$ docker restart 215b04f73370
1
2
3
4
5
6
#删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f 强制删除一个正在运行的容器(实际上是先停止容器,然后再删除容器)
-v 删除和容器关联的卷

$ docker rm -f 215b04f73370
1
2
3
4
5
#列出容器清单
docker ps [OPTIONS]
-a 列出所有容器,包括已经停止的容器
-q 值显示容器ID
-l 列出最近创建的容器
1
2
#连接到一个正在运行的容器
docker attach [OPTIONS] [CONTAINER]
1
2
3
4
#在一个已经运行的容器里运行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

$ docker exec -ti db1 /bin/bash

Docker container state management

1
2
3
4
5
6
#查看容器内部日志
docker logs [OPTIONS] CONTAINER
-f 容器日志追踪

$ docker logs grave_roentgen
$ docker logs 20348fdf82e4
1
2
#查看容器内部运行的进程
docker top CONTAINER
1
2
3
4
5
#获取容器、images、task的配置信息和状态信息
docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...]
-f 按照给定的模板来输出结果

$ docker inspect -f '{ { range .NetworkSettings.Networks } }{ { .IPAddress } }{ { end } }' romantic_mahavira
1
2
3
4
#查看容器内公开端口隐射在宿主机上的端口
docker port CONTAINER [PRIVATE_PORT[/PROTO]]

$ docker port 215b04f73370

Docker images management

1
2
3
4
5
#列出image清单
docker images [OPTIONS] [REPOSITORY[:TAG]]
-a 显示所有image
-q 只显示image ID
--digests 显示摘要信息
1
2
3
4
5
6
#拉取image镜像
docker pull [OPTIONS] IMAGENAME[:TAG|@DIGEST]
-a 将所有tag image下载下来
--disable-content-trust=true 取消检查image

$ docker pull chinakevinguo/docker-whale:latest
1
2
3
4
#查找images
docker search [OPTIONS] image

$ docker search sinatra
1
2
3
4
5
6
7
8
9
#登录到docke服务器
docker login [OPTIONS] [SERVER]
-u 用户名
-p 密码

$ docker login
Username: chinakevinguo
Password:
Login Succeeded
1
2
3
4
5
6
#将经过修改的容器构建成新的镜像,一般不推荐这种用法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a 作者
-m 描述

$ docker commit -m "Added json gem" -a "Kevin Guo" goofy_bohr chinakevinguo/sinatra:v2
1
2
3
4
5
6
7
#通过dockerfile构建镜像
docker build [OPTIONS] PATH | URL
-t 指定image的REPOSITORY,可以指定多个REPOSITORY
-f 指定你的dockerfile的名称路径(默认是$PATH/Dockerfile)

$ docker build -t chinakevinguo/sinatra:v3 ~/sinatra
$ docker build -t chinakevinguo/sinatra:v3 -f ~/sinatra/mydockerfile .
1
2
3
4
#为image打tag,也可以算是为images重命名
docker tag IMAGE[:TAG] IMAGE[:TAG]

$ docker tag chinakevinguo/sinatrasdfa:v3 chinakevinguo/sinatra:v5
1
2
3
4
#上传image到dockerHub上
docker push [OPTIONS] NAME[:TAG]

$ docker push chinakevinguo/docker-whale:latest
1
2
3
4
#删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
-f 强制删除镜像(实际上是先删除了基于该镜像创建的容器之后再删除的该镜像)
$ docker rmi -f web1

Docker network management

  • host模式:容器和宿主机共享network namespace
  • container模式:容器和另外一个容器共享network namespace。kubernetes中的pod就是多容器共享一个network namespace
  • none模式:容器有独立的network namespace,但没有对其进行任何的网络配置
  • bridge模式:docker默认模式,容器通过一个网桥获取ip,以NAT的方式和外界通信

docker网络模型

总结一下bridge网络就是:docker会在机器上自己维护一个网络,并通过docker0这个虚拟交换机和主机本身的网络连接在一起

1
2
3
4
5
6
7
8
9
10
#docker网络管理
docker network COMMAND

COMMANDS:
create 创建一个网络
connect 链接容器到网络
disconnect 将容器从网络断开
inspect 显示网络的详细信息
ls 列出网络
rm 删除一个或者更多网络
1
2
3
4
5
#创建一个网络
docker network create [OPTIONS] YOURNETWORK
-d 指定docker使用哪种模式的网络

$ docker network create -d bridge my-bridge-network
1
2
3
4
#将容器从网络断开
docker network disconnect [OPTIONS] NETWORK CONTAINER

$ docker network disconnect bridge web1
1
2
3
4
5
6
#将容器链接到网络
docker network connect [OPTIONS] NETWORK CONTAINER
--ip 指定ip地址
--link 添加连接到其他容器

$ docker network connect my-bridge-network web1

Docker container volume management

1
2
3
4
5
6
7
#docker volume 管理
docker volume COMMAND
COMMANDS:
create 创建卷组
inspect 显示卷组详细信息
ls 列出卷组
rm 删除卷组
1
2
#为容器挂载卷组
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py

这个命令是将宿主机上的/src/webapp挂载到容器的/webapp,如果/webapp存在,则/src/webapp会覆盖挂载,但是不会删除以前的内容,取消此次挂载后,以前的内容又可以访问了。 容器内部的目录必须指定绝对路径,而宿主机上的目录即可以是绝对路径,也可以仅仅是一个名字或者什么都不写,如果只是一个名字$NAME,则会默认挂载到/var/lib/docker/volumes/$NAME/_data,如果什么都不写,则会挂载到/var/lib/docker/volumes/下的一个随机生成的字符串下。

1
2
3
4
5
6
7
#不指定名字,默认挂载
$ docker run -d -P --name web -v /webapp training/webapp python app.py

$ docker inspect web
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp"
1
2
3
4
5
6
7
#仅仅指定名字
$ docker run -d -P --name web -v webapp:/webapp training/webapp python app.py

$ docker inspect web
"Name": "webapp",
"Source": "/var/lib/docker/volumes/webapp/_data",
"Destination": "/webapp"
1
2
3
4
5
6
#指定绝对路径
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py

$ docker inspect web
"Source": "/src/webapp",
"Destination": "/webapp",
1
2
3
4
5
6
#挂载共享卷组作为数据卷
$ docker run -d -P --volume-driver=flocker -v my-named-volume:/webapp --name web training/webapp python app.py

#先创建共享卷组,然后再进行挂载
$ docker volume create -d flocker -o size-20GB my-named-volume
$ docker run -d -P -v my-named-volume:/webapp --name web training/webapp python app.py
1
2
3
4
5
6
7
8
#将容器作为卷组挂载进容器

#创建一个卷组容器
$ docker create -v /dbdata --name dbstore training/postgres /bin/true

#使用--volumes-from 将dbdata挂载进其他容器
$ docker run -d --volumes-from dbstore --name db1 training/postgres
$ docker run -d --volumes-from dbstore --name db2 training/postgres

Backup,restore,migrate data volumes

1
2
#将卷组容器挂载到对应的容器之后,进行卷组数据备份
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
1
2
3
#数据恢复
$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
1
2
#在使用--rm的时候,会删除匿名卷组,而不会删除定义好的命名卷组
$ docker run --rm -v /foo -v awesome:/bar busybox top

所谓匿名卷组:即那些指定了路径和那些没有指定命名的挂载项目

文章目录
  1. 1. Docker Command
    1. 1.1. Docker container management
    2. 1.2. Docker container state management
    3. 1.3. Docker images management
    4. 1.4. Docker network management
    5. 1.5. Docker container volume management
    6. 1.6. Backup,restore,migrate data volumes
|