Docker常用命令以及使用案例

参考资料

docker这个东西真的很好用,值得一学。

docker 安装

1、docker的安装非常简单,只需要执行官方提供的脚本就可以了。


// 官方脚本安装

wget -qO- https://get.docker.com/ | sh

// 阿里云脚本安装

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

// daocloud脚本安装

curl -sSL https://get.daocloud.io/docker | sh

当然由于墙的问题,执行这个脚本有可能会异常缓慢,具体的解决方法就是更换linux源即可。

2、当要以非root用户可以直接运行docker时,需要执行以下命令:


sudo usermod -aG docker 账户名

否则系统会提示以下报错:


docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

3、配置docker的镜像源


// 修改配置文件 /etc/docker/daemon.json

vim /etc/docker/daemon.json

// 加入下面的内容:

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

// 然后重启docker服务即可
service docker restart

由于不可描述的原因,docker的源下载非常慢,这里使用DaoCloud的源,详见 https://www.docker-cn.com/registry-mirror

镜像运行命令

镜像运行的命令比较复杂,这里把常用的几个命令放这里,当作案例。

1、运行busybox


// -it 终端交互运行

docker run -it busybox

2、运行nginx


// -d 守护进程运行

// -p 端口映射

// -v 文件路径映射

// -- mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,readonly

docker run -d -p 80:80 -v /var/www/html:/usr/share/nginx/html nginx:v2

// 另一种方式

// -- mount 和上面一样,也是用于文件映射,但是有不同的就是如果镜像里面的文件不存在,

// 则生成容器的时候回报错。

// readonly 参数可以不传,如果传了,表示对应容器内的文件只读。

docker run -d -p 80:80 \

    --mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,readonly \

    nginx:v2



// 如果不想指定web容器的端口,则可以使用 -P(注意这里是大写) 来随机映射

docker run -d -P nginx:v2

3、启用一个ubuntu终端


// --rm 容器退出后自动删除

// --restart=always 自动重启

// --name 容器名称 命名容器

docker run -it --rm --restart=always --name myubuntu ubuntu:latest

4、容器互联

通过创建一个docker网络,让两个容器运行在同一个网络中。


1) 创建一个docker网络

docker network create -d bridge my-net

2) 运行一个容器并连接到新建的 my-net 网络

docker run -it --rm --name busybox1 --network my-net busybox sh

3) 打开新的终端,再运行一个容器并加入到 my-net 网络

docker run -it --rm --name busybox2 --network my-net busybox sh

4) 在 busybox1 容器输入以下命令

/ # ping busybox2

PING busybox2 (172.19.0.3): 56 data bytes

64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms

64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

// 可以看到在 busybox1 中是能请求到 busybox2 的。

// 同样,在 busybox 中也能请求到 busybox1

服务命令

1、docker的启动/重启/关闭


service docker start/restart/stop

2、安装Docker管理工具


docker run -d -p 9001:9000 -v "/var/run/docker.sock:/var/run/docker.sock" portainer/portainer

portainer 是一款易用的docker图形管理工具,地址如下:https://github.com/portainer/portainer

镜像命令

1、查询docker镜像


docker images

2、获取镜像


docker pull (镜像下载地址/镜像名称)

3、删除镜像


// 通过ID删除

docker rmi (镜像ID)

// 通过tag删除

docker rmi (tag)

// 批量删除

docker rmi $(docker images | grep "模糊匹配内容" | awk '{print $3}')

4、转移镜像


// 保存镜像

docker save compose01_web(镜像名) > t.tar(目标文件)

// 读取镜像

docker load --input ./t.tar(读取的文件)

// 也可以一步到位,直接通过ssh发送到其他机器

docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'

docker可以建立自有镜像仓库,但是一般来说我们还是直接转移会方便一些。

5、安装私有仓库


// 获取仓库的镜像

sudo docker pull registry

// 启动镜像,将镜像的存放地址映射为非临时目录

sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

// 启动完成后,如果我们直接push镜像,会出现如下提示:

Error response from daemon: Get https://10.10.239.222:5000/v1/_ping: http: server gave HTTP response to HTTPS client

// 这是由于新版本的docker私有库要求https传输镜像,所以要进行一些设置,让我们能够正常上传镜像。

// 操作步骤如下:

// 打开配置文件 /etc/docker/daemon.json,加入json格式的内容

{

  "其他配置": "其他配置", // 这里是演示,如果已经有其他配置,共用一个json

  "insecure-registries": ["10.10.239.222:5000"] // 不要求使用ssl的库以及端口。

}

// 重启docker即可

service docker restart

此外:不同版本的linux的设置方式可能有点不同,具体可以参考这个文档 https://yeasy.gitbooks.io/docker_practice/content/repository/registry.html

如果需要配置有认证的registry,参考这个文档:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html

参考文档:

6、上传镜像


// 上传镜像

docker pull

7、查询镜像 - 这个命令用于查询私有的镜像库


// 查询镜像中存在的分类

curl -X GET http://172.16.9.30:5000/v2/_catalog

// 返回

{"repositories":["busybox"]}

// 查询镜像的tag

curl -X GET http://172.16.9.30:5000/v2/busybox/tags/list

// 返回

{"name":"busybox","tags":["latest"]}

具体的API查询地址:https://docs.docker.com/registry/spec/api/

容器命令

1、查询当前容器状态


docker ps -a

这里可以不带 -a ,不带的情况下只查询当前在运行的容器。

2、停止容器运行


docker stop (容器ID)

3、删除容器


docker rm (容器ID)

// 批量删除

docker rm $(docker ps -qa)

// 批量删除

docker ps -qa | xargs -n 1 docker rm

4、进入一个已有容器


$ docker exec -it webserver bash

5、转移容器


// 导出容器

docker export

// 导入容器

docker import

6、清除所有未运行状态的容器


docker container prune

7、设置容器的dns


// 进入docker的配置文件

cd /etc/docker/daemon.json

// 增加下面的内容,然后重启docker服务

{

  "dns" : [

    "114.114.114.114",

    "8.8.8.8"

  ]

}

// 后续的容器dns都会从读取以上配置的dns

docker run -it --rm ubuntu cat etc/resolv.conf

// 输出

nameserver 114.114.114.114

nameserver 8.8.8.8

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

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,514评论 15 147
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国...
    Blazzer阅读 3,130评论 0 13
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,846评论 2 49
  • 夜茫茫,风微凉,哪堪寒意袭? 嚖嚖萧声起,高楼静听,触动心上弦。 望长空,幽远幽远,晦暗难寻路。 时闻蟋蟀歌,时看...
    肝儿宝宝阅读 198评论 0 1
  • 更高级的信息反馈,可以根据用户的实际情况,提供更详细的回复,尤其是重要消息。比如ox下,用pages打开doc文件...
    freshtime阅读 122评论 0 0