Docker常用操作命令总结

获取Docker镜像的命令 docker pull

命令格式如下:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
  • 选项可以通过 docker pull --help 查看
  • Docker Registry地址:<域名/IP>[:端口号], 默认地址是Docker Hub
  • 仓库名:仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。

例如:下载mysql的镜像

[root@node1 docker]# docker pull mysql:5.7.19
5.7.19: Pulling from library/mysql
ad74af05f5a2: Pull complete 
0639788facc8: Pull complete 
de70fa77eb2b: Pull complete 
724179e94999: Pull complete 
50c77fb16ba6: Pull complete 
d51f459239fb: Pull complete 
937bbdd4305a: Pull complete 
35369f9634e1: Pull complete 
f6016aab25f1: Pull complete 
5f1901e920da: Pull complete 
fdf808213c5b: Pull complete 
Digest: sha256:96edf37370df96d2a4ee1715cc5c7820a0ec6286551a927981ed50f0273d9b43
Status: Downloaded newer image for mysql:5.7.19

说明:下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的 前 12位。并且下载结束后,给出该镜像完整的sha256 的摘要,以确保下载一致性。

列出本地镜像 docker images

[root@node1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.19              c73c7527c03a        11 days ago         412MB

删除镜像 docker rmi

  • 删除镜像之前,先查看是否有容器在运行,若在运行,先 docker stop CONNTAINER_ID
  • 再查看停止的容器 docker ps -a
  • 清除所有已经停止的容器 docker rm $(docker ps -qa)
  • 删除对应的镜像: docker rmi IMAGE_ID
  • 删除REPOSITORY为none的镜像:docker rmi $(docker images -f "dangling=true" -q)

删除name和tag都是none的镜像

docker rm  $(docker ps -a -q)
docker images|grep none|awk '{print $3}'|xargs docker rmi

启动容器 docker run

普通启动,容器执行完成之后就退出

[root@node1 docker]# docker run mysql:5.7.19 /bin/echo 'hello world'
hello world

以交互式方式进入容器,添加 -t 创建终端,-i 交互模式

[root@node1 docker]# docker run -t -i mysql:5.7.19 /bin/bash
root@759e97505f13:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever

若不添加-d参数,退出/bin/bash之后,容器也就退出了;

docker run -d 守护状态运行

[root@node1 ~]# docker run -idt mysql:5.7.19 /bin/bash
40ce5b1be185d22cc356bb8f38e29b3f98df23c6933a2475a9b0f5cfdb9ac210
[root@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
40ce5b1be185        mysql:5.7.19        "docker-entrypoint..."   6 seconds ago       Up 5 seconds        3306/tcp            upbeat_ptolemy

这样启动之后,退出/bin/bash之后,容器仍然运行。docker run -d实现dettach的作用,即对于你docker run的前台进程,该进程不对容器进行stdin,stdout,stderr的attach。

查看容器:docker ps

  • 查看运行的容器: docker ps
  • 查看所有的容器: docker ps -a
  • 只显示容器的id: docker ps -q 或者 docker ps -qa

常用docker rm $(docker ps -qa)删除已经停止的容器

进入容器,docker exec | docker attach

docker exec 进入命令,该命令较常用

  • 通过CONTAINER_ID进入容器
docker exec -it CONTAINER_ID /bin/bash
  • 通过CONTAINER_NAME进入容器,该name就是启动是--name的值
docker exec -it CONTAINER_NAME /bin/bash

docker attach [CONTAINER_ID | NAMES]

[root@node1 docker]# docker attach 40ce5b1be185
[root@40ce5b1be185:/# ls

注意:使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

容器的启动、停止和重启: docker start | docker stop | docker restart

docker start  CONTAINER_ID   // 启动一个容器
docker stop   CONTAINER_ID   // 停止一个容器
docker restart  CONTAINER_ID // 重启一个容器

docker rm 删除处于终止状态的容器

清理容器

docker rm CONTAINER_ID

清理所有处于终止状态的容器

docker rm  $(docker ps -a -q)

Docker常用操作

1 获取容器日志: docker logs CONTAINER_ID

获取对应容器的日志,容器的CONTAINER_ID可以通过docker ps获得

2 文件拷贝docker cp

拷贝docker中的文件到宿主机,需要注意的是:不管容器有没有启动,拷贝命令都会生效。

  • 拷贝文件到宿主机
docker cp CONTAINER:SRC_DIRECTORY DES_DIRECTORY
  • 拷贝文件到容器
docker cp SRC_DIRECTORY CONTAINER:DES_DIRECTORY 

3 docker端口映射【启动容器时添加 -p参数】

docker run -p ip:hostPort:containerPort redis
  • 宿主机IP和端口:ip:hostPort
  • 容器端口:containerPort

4 docker 映射宿主机目录到容器【启动容器时添加 -v参数】

docker run -d -v /home/docker/code:/home/ocs90/src  -it 10.45.80.1/public/oraclejdk_java8_cloud_ci_ocs_90s:latest /bin/bash
  • -v 宿主机目录:容器内目录

5 docker 设置网络类型【启动容器时添加 --net参数】

docker run -d --net host -it 10.45.80.1/public/oraclejdk_java8_cloud_ci_ocs_90s:latest /bin/bash

docker的网络类型总共有5种网络类型,默认的类型是桥接模式,若希望使用其他网络模式,需要使用 --net切换网络模式。

  • none模式,容器不需要和外界通信时使用;
  • host模式,和宿主机共享一个网络,因此获得的IP和宿主机在同一个网段;
  • bridge模式
  • container模式
  • user-defined模式

6 docker容器名称设置 【启动容器时添加 --name参数】

docker run -d -it --name "dev_container" ali_private:latest /bin/bash 
  • --name指定启动容器的名称

7 导出导入docker镜像

导出docker镜像

docker save -o ocs_90s_ali_private_cloud.tar 10.45.80.1/ocssit/ocs_90s_ali_private_cloud:TAG

导入docker镜像

docker load --input ocs_90s_ali_private_cloud.tar

综合例子

1 启动容器

docker run -d -v /home/docker/code:/home/ocs90/src --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --net host --name "hunter_dev" -it 10.45.80.1/public/oraclejdk_java8_cloud_ci_ocs_90s:latest /bin/bash
  • 映射文件目录:-v /home/docker/code:/home/ocs90/src
  • 使容器内支持GDB调试:--cap-add=SYS_PTRACE --security-opt seccomp=unconfined
  • 指定网络模式为host:--net host
  • 指定容器名称为:--name "hunter_dev"
  • 以交互模式进入容器:-it
  • 容器以台运行模式启动:-d

2 进入容器

docker exec -it hunter_dev /bin/bash
  • 使用exec进入容器
  • 使用容器名称hunter_dev而不是id进入容器

3 停止并删除容器

docker stop hunter_dev && docker rm hunter_dev

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容