Docker常用命令

  • 镜像获取
# 先搜索⼀下,镜像⽂件,是否存在
docker search nginx
# 拉取,下载镜像
docker pull nginx
# 查看本地的docker镜像有哪些
  • 查看镜像
docker image ls
# 运⾏镜像的命令,参数如下
## docker run 参数为
## 镜像的名字/id
## -d 后台运⾏容器
## -p 80:80   端⼝映射, 宿主机端⼝:容器内端⼝  ,你访问宿主机的这个端⼝,也就访问到了容器内的端⼝
## docker run命令,运⾏结果,会返回⼀个容器的id
root@C31M:~# docker run -d -p 80:80 nginx
1a033aef64fec78acc9007dc2d7c8e4ed9849ca00286676583777758a91fc84f
# 查看容器是否在运⾏
root@C31M:~#  docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                               NAMES
ac7d1e491bbb   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   cranky_mclaren
# 此时可以访问宿主机的80端⼝,查看到容器内的80端⼝的应⽤是什么了
192.168.x.x:80
# 可以尝试停⽌容器,看下结果
docker stop 容器id
# 停⽌具体的容器进程
docker stop ac7d1e491bbb
# 启动具体的容器进程
docker start ac7d1e491bbb
# 进⼊到正在运⾏的容器内,命令是 docker exec
# 运⾏容器,且进⼊容器内
# 参数 解释 -i 交互式命令操作  -t 开启⼀个终端  ac7d1e491bbb 是镜像的id  bash 进⼊容器后,执⾏的命令
root@C31M:~# docker exec -it ac7d1e491bbb bash
# -it 开启⼀个交互式的终端  --rm 容器退出时删除该容器
root@C31M:~# docker exec -it --rm ac7d1e491bbb bash
# exit 退出镜像
exit
# 查看docker镜像的存储路径
docker info
#筛选一下路径
docker info |grep Root
# 该⽂件作⽤是 记录 镜像 和容器的配置关系 
ls /var/lib/docker/image/overlay2/imagedb/content/sha256/ -l
  • 镜像的增删改查
# 增加
docker pull xxx
# 查看
docker images xxx    docker images nginx
docker images xxx:xxx  docker images centos:7.8.2003
docker images -q          # 值列出镜像的id   -q --quiet 只列出id
#删除
# 根据镜像的 id,名字,摘要等
# 被删除的镜像,不得有依赖的容器记录
# docker rmi  镜像id   
docker rmi hello-world
# 此时报错,提示hello-world 有依赖 通过docker ps -a 查看所有运行过以及正在运行的容器,所以使用docker rm xxx先删除容器记录
#查看容器列表并删除
docker ps -a
docker rm 容器id
#查看镜像列表并删除
docker images
docker rmi 镜像id
#批量删除镜像的操作
# 批量删除镜像,慎⽤,是删除所有镜像
docker rmi `docker images -aq`
  • 镜像管理---镜像的导入与导出
# 导出镜像
# ⽐如默认运⾏的centos镜像,不提供vim功能,运⾏该容器后,在容器内安装vim
# 然后提交该镜像,再导出该镜像为压缩⽂件,可以发给其他⼈⽤
docker commit
# 导出镜像的命令
docker image save centos:7.8.2003 > /opt/centos7.8.2003.tgz
# 导⼊镜像的命令 load
docker image load -i  /opt/centos7.8.2003.tg
# 查看镜像详细信息
# 查看docker服务的信息
docker info 
# 查看dockers镜像信息,docker image inspect 镜像id
docker image inspect afb
  • 容器的管理
    docker run等于创建+启动

docker run 镜像名,如果镜像不存在本地,则会在线去下载该镜像

注意:容器内的进程必须处于前台运⾏状态,否则容器就会直接退出,⾃⼰部署⼀个容器运⾏,命令不得后台运⾏,前台运⾏即可

ping www.baidu.com 前台运行
nohub ping www.baidu.com 后台运行
jobs 查看后台运行的命令
fg id 例如fg 1让后台命令继续前台执行

如果容器内,什么事也没做,容器也会挂掉,容器内,必须有⼀个进程在前台运⾏
我们如果运⾏nginx基础镜像,没有运⾏任何程序,因此容器直接挂掉

# 运⾏容器的玩法
# 1.运⾏⼀个永远会挂掉的容器,(从错误示范来学docker容器,因为是后台运行了)
# 这个写法,会产多多独⽴的容器记录,且容器内没有程序在跑,因此挂了
docker run centos:7.8.2003

# 2.运⾏容器,且进⼊容器内,且在容器内执⾏某个命令
[root@yc_docker01 ~]# docker run -it centos:7.8.2003 sh
 sh-4.2#
 sh-4.2#
 sh-4.2# cat /etc/redhat-release
 CentOS Linux release 7.8.2003 (Core)

# 3.开启⼀个容器,让它帮你运⾏某个程序,属于前台运⾏,会卡主⼀个终端
[root@yc_docker01 ~]# docker run  centos:7.8.2003  ping baidu.com
 PING baidu.com (198.18.0.130) 56(84) bytes of data.

# 4.运⾏⼀个活着的容器,docker ps可以看到的容器
# -d 参数,让容器在后台跑着(针对宿主机⽽⾔)
# 返回容器id
 [root@yc_docker01 ~]# docker run -d  centos:7.8.2003  ping baidu.com
 608dd314f21c931c35c2a0ebf29b021c7634dfd26e4d757cf542f0eff6c64727

# 5.丰富docker运⾏的参数
# -d 后台运⾏
# --rm 容器挂掉后⾃动被删除
# --name 给容器起个名字
[root@yc_docker01 ~]# docker run -d --rm --name pythonav  centos:7.8.2003 ping pythonav.cn
 e3a7f6a7d0c6902d6af565b4bb9cf81a62d4840bbac978105b6d8da233f532a5
[root@yc_docker01 ~]# docker ps
CONTAINER ID           IMAGE           COMMAND                STATUS             PORTS           NAMES
e3a7f6a7d0c6    centos:7.8.2003     "ping pythonav.cn"      5  seconds ago   Up 5 seconds    pythonav

# 6.查看容器⽇志的玩法,刷新⽇志
docker logs -f
docker logs  f2598cb26363  | tail -5
# 6. 查看容器内进程信息的命令
docker top 容器id
# 6. 查看容器内资源信息的命令
docker stats 容器id

# 7.进⼊正在运⾏的容器空间内
# exec指令⽤于进⼊容器空间内
docker exec -it f2598cb26363 bash

# 8.查看容器的详细信息,⽤于⾼级的调试
docker container inspect 容器id
# 获取容器内的ip地址,容器的格式化参数
 docker inspect ed4e6852f620 | grep 172
# 拿到容器内ip
 docker inspect --format '{{.NetworkSettings.IPAddress}}' ed4e6852f620

# 9.容器的端⼝映射
# 后台运⾏nginx容器,且起个名字,且端⼝映射宿主机的85端⼝,访问到容器内的80端⼝
docker run -d  --name yuchao_nginx -p 85:80 nginx
# 查看容器
[root@yc_docker01 ~]# docker ps
# 9.1 查看容器的端⼝转发情况
docker port 容器id
 [root@yc_docker01 ~]# docker port 2e73fac44507
 80/tcp -> 0.0.0.0:85
 80/tcp -> :::85
 # 9.2随机端⼝映射 -P 随机访问⼀个宿主机的空闲端⼝,映射到容器内打开的端⼝
docker run -d  --name 
yuchao_nginx_random  -P nginx
 473ee9590e57d2880bd6a432a691dda055486d24878c27c79796300714e58977
 [root@yc_docker01 ~]# docker ps  
:::49153->80/tcp   
0.0.0.0:49153->80/tcp, 

# 10.容器的提交
# 运⾏基础的centos:7.8.2003 ,在容器内安装vim,然后提交新的镜像
# 新的镜像,再运⾏出的容器,默认就携带vim了
[root@yc_docker01 ~]# docker run -it centos:7.8.2003 bash
# 提交容器,通过docker images -a
#docker  commit 容器id 新的镜像名
docker commit dafafe yuchao163/centos-vim7.8.2003
[root@yc_docker01 ~]# docker run -it yuchao163/centos-vim7.8.2003 bash
[root@f01fd5201723 /]# vim xiake.txt
[root@f01fd5201723 /]# cat xiake.txt
xin ku le  peng you men ! xiake xiu xi !
# 修改镜像名字命令
[root@yc_docker01 learn_docker]# docker tag b4200a856253 
my_nginx

dockerfile实践学习

dockerfile用来部署docker容器,就是用自定义的文件来部署一个所需的容器环境
定制docker容器的两种方式:
1、手动修改容器,导出这个容器的镜像,基于导出的镜像创建容器;
2、基于自定义dockerfile的指令文档,按照指令流程创建容器。

FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别⼈,谁负责养它?(指定维护者信息,可以没有)
RUN 你想让它⼲啥(在命令前⾯加上RUN即可)
ADD 添加宿主机的⽂件到容器内,还多了⼀个⾃动解压的功能
#ADD /opt/xx.tgz  /opt/  代表的意思是将宿主机的opt下的xxx.tgz文件解压后拷贝到容器内的opt目录下
# RUN tar -zxf /opt/xx.tgz # 报错!该tgz⽂件不存在!!
COPY 作⽤和ADD是⼀样的,都是拷⻉宿主机的⽂件到容器内,COPY就是仅仅拷⻉
WORKDIR 我是cd,今天刚化了妆(设置当前⼯作⽬录)
VOLUME 给它⼀个存放⾏李的地⽅(设置卷,挂载主机⽬录)就是把容器内的目录映射到宿主机上
EXPOSE 它要打开的⻔是啥(指定对外的端⼝),在容器内暴露⼀个窗⼝,端⼝ EXPORT 80
CMD 奔跑吧,兄弟!(指定容器启动后的要⼲的事情)

dockerfile实践

需求,通过dockerfile,构建nginx镜像,且运⾏容器后,⽣成的⻚⾯,是"带你学习docker"

 # 1. 创建Dockerfile,注意⽂件名,必须是这个
[root@yc_docker01 learn_docker]# pwd
 /learn_docker
 [root@yc_docker01 learn_docker]# cat Dockerfile
 FROM nginx
 RUN echo '<meta charset=utf8>带你⽤docker运⾏nginx服务.' > /usr/share/nginx/html/index.html
 # 2.构建Dockerfile
 docker build .
 # 3.修改镜像名字
[root@yc_docker01 learn_docker]# docker tag b4200a856253 
my_nginx
 # 构建出的镜像如下
如下指令该怎么⽤
[root@yc_docker01 learn_docker]# docker images
 REPOSITORY                      TAG        IMAGE ID       
CREATED              SIZE
 my_nginx                        latest     b4200a856253   
About a minute ago   133MB
 # 4.运⾏该镜像
docker run -d -p 80:80  my_nginx  
# 5.查看宿主机的80端⼝
http://10.211.55.21/
带你⽤docker运⾏nginx服务

如下指令该怎么用

#COPY
copy chaoge.py /home/
# ⽀持多个⽂件,以及通配符形式复制,语法要满⾜Golang的filepath.Match
copy chaoge* /tmp/cc?.txt. /home/

#ADD
ADD chaoge.tgz /home/
RUN  linux命令(xxx修改命令)

# CMD
# CMD在容器内运⾏某个命令,启动程序
# 该镜像在运⾏容器实例的时候,执⾏的具体参数是什么
CMD ["参数1","参数2"]
CMD ["/bin/bash"]
# 等同于命令⾏的直接操作 docker run -it centos   cat /etc/osrelease
CMD ["cat","/etc/os-release"]
#docker run  my_centos curl -s http://ipinfo.io/ip
CMD ["curl","-s","http://ipinfo.io/ip"]
# CMD有关启动程序的坑
#把宿主机安装,启动nginx的理念放⼊到dockerfile
 1. RUN yum install nginx
 2. RUN 配置⽂件修改 sed
 3. RUN systemctl start nginx  容器内的程序必须是前台运⾏,你的容器是启动不了的
#这样第3步是无法启动容器的
 4. 正确的应该是 CMD ["nginx","-g","daemon off;"]

#ENTRYPOINT
#ENTRYPOINT 和 CMD的用法
#作⽤和CMD⼀样,都是在指定容器启动程序以及参数。
#当指定了ENTRYPOINT之后,CMD指令的语义就有了变化⽽是吧CMD的内容当作参数传递给ENTRYPOINT指令。
CMD   xxxx
ENTRYPOINT  xx

#ARG和ENV
#ARG和ENV指令,都是用在dockerfile指令文件里
#相同点:ARG和ENV⼀样 设置一个变量,使用$NAME或${NAME} 就可以直接获取变量值,来引用。
  #eg:定义变量
  ARG NAME="yuchao"
  ARG NAME "yuchao"
  ENV AGE="18"
  ENV AGE "18"
  ENV MYSQL_VERSION=5.6
#不同点:ENV ⽆论是在镜像构建时,还是容器运⾏,该变量都可以使⽤。ARG只是⽤于构建镜像需要设置的变量,容器运⾏时就消失了。

#VOLUME 
#容器在运⾏时,应该保证在存储层(容器内)不写⼊任何数据,运⾏在容器内产⽣的数据,推荐是挂载,写⼊到宿主机上,进⾏维护。
#VOLUME 宿主机目录:容器目录
#VOLUME 容器目录
#VOLUME /data  # 将容器内的/data⽂件夹 ,在容器运⾏时,该⽬录⾃动挂载为匿名卷,任何向该⽬录中写⼊数据的操作,都不会被容器记录,保证的容器存储层⽆状态理。该匿名目录可以通过docker inspect 5b12bf9d63e9查看实体机映射到哪个匿名目录了
1.容器数据挂载的⽅式,通过dockerfile,指定VOLUME⽬录
2.通过docker run -v 参数,直接设置需要映射挂载的⽬录

# EXPOSE
#EXPOSE容器对外提供的端口服务
 docker port 容器 #查看容器使用的端口情况
docker run -p 宿主机端⼝:容器端⼝
docker run -P # 大写P直接写容器端口,作⽤是随机宿主机端⼝:容器内端

#WORKDIR  
⽤于在dockerfile中,⽬录的切换,更改⼯作⽬录

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

推荐阅读更多精彩内容