Docker常用命令及镜像制作方法

上节课回顾与复习

镜像命令:

docker search                 #搜索镜像

docker pull/push           #下载/上传镜像

docker images               #查看所有本地主机上的镜像 可以使用docker image ls代替

docker tag                             #源镜像名  新镜像名

docker rmi                             #删除镜像

docker   image  prune          #移除没有标签并且没有被容器引用的镜像,dangling(摇晃)镜像

示例:

Tomcat镜像获取:[root@docker-01 ~]# docker pull tomcat

添加新的标签:[root@docker-01 ~]# docker tag tomcat:latest tomcat:v1

删除镜像rmi -f:不建议用id号删除,一般用名称加标签删除

[root@docker-01 ~]# docker rmi -f tomcat:latest

容器管理命令

docker run        镜像                    #新建容器并启动 (-i -t -d -p -P -v --net --name)

docker ps                               #列出正在运行的容器

docker ps -a                                              #列出所有容器(包括运行的和停止的)

docker ps -aq                                           #列出所有容器ID(-q只列出ID)

docker ps   -aqf  “status=exited”                #过滤出所有停止的的容器(exited小写)

docker ps   -aqf  “status=created”      #过滤出所有停止的的容器(created小写)-f:    filter过滤

docker rm         容器id                                     #删除指定停止的容器

docker rm  -f   容器id                                     #删除指定运行的容器

docker   rm  -f  $(docker ps -aq)                     #删除所有容器 -f:force

docker container prune                                    #删除所有已停止的容器

docker start      容器id                                     #启动容器

docker restart   容器id                                     #重启容器

docker stop             容器id                                     #停止当前正在运行的容器

docker logs             容器id                                      #查看容器日志

docker inspect 容器id                                      #查看容器详细信息

docker exec      -it   容器id  /bin/bash                  #进入启动的容器

docker cp 容器id:路径  宿主机路径                #宿主机与容器间复制文件,双向

docker cp 宿主机路径    容器id:路径               #宿主机与容器间复制文件,双向

示例:

  1. Docker run命令示例

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

注意:运行容器时一定要加/bin/bash进入终端!!!

  1. 宿主机的80端口被占用,再次运行80端口时会报错说端口已占用,且容器不会运行

运行一个新容器:

[root@docker-01 ~]# docker run -d -p 80:80 nginx

真实机浏览器访问http://192.168.10.11:80  #访问宿主机端口

再次运行此容器:出现端口被占用的情况

[root@docker-01 ~]# docker run -d -p 80:80 nginx    #宿主机端口:容器端口

解决方法:如果有80端口被占用,容器不会被运行,可更换冒号前的端口

[root@docker-01 ~]# docker run -d -p 81:80 nginx    #宿主机端口:容器端口

真实机浏览器访问http://192.168.10.11:81    #访问宿主机端口

  1. Dokcer cp命令示例

使用docker cp命令发布做好的nginx网页

[root@docker-01 ~]# docker run -d -p 80:80 nginx:1.20

[root@docker-01 ~]# docker ps

[root@docker-01 ~]# docker exec -it 6c2941f69314 /bin/bash

客户端浏览器访问http://192.168.10.11

在宿主机上编辑一个index.html文件,复制到容器中

echo  “test-page”  >  index.html

[root@docker-01 ~]# docker cp index.html 6c2941f69314:/usr/share/nginx/html/index.html

客户端浏览器访问http://192.168.10.11

  1. Docker rm命令示例

docker  images

docker  rm  容器id                                    #删除某个Exited状态的容器

docker container     prune                         #删除所有Exited容器

docker  rm  -f  $(docker ps -aq)                     #删除所有容器 -f:force

=================================================================================

本章内容

制作镜像的方法:

10.11主机上准备nginx镜像:

10.11主机上备份nginx镜像并拷贝给10.12的主机

[root@docker-01 ~]# docker save -o nginx.tar nginx:latest

[root@docker-01 ~]# scp nginx.tar root@192.168.10.12:/root

10.12主机上导入镜像:

[root@docker-02 ~]# systemctl start docker

[root@docker-02 ~]# ls

anaconda-ks.cfg  nginx.tar

[root@docker-02 ~]# docker load -i nginx.tar

[root@docker-02 ~]# docker images

制作容器的方法:

基于cnetos镜像运行一个容器:

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

在容器中创建一个新文件:[root@eccdc1476ed2 /]# touch testfile

查看容器:[root@docker-01 ~]# docker ps

导出容器:[root@docker-01 ~]# docker export eccdc1476ed2 > centos7_v1

拷贝容器到主机10.12:

[root@docker-01 ~]# scp centos7_v1 root@192.168.10.12:/root

10.12主机上导入镜像:

[root@docker-02 ~]# docker import centos7_v1 centos:v1

使用镜像运行容器:

[root@docker-02 ~]# docker run -it centos:v1 /bin/bash

[root@885ae9e3a9f1 /]# ls

容器导出后是镜像

通过容器保存为本地镜像:

容器中可以使用yum命令说明运行容器前已经配置好yum源了,容器中不可以使用命令yum也没关系,使用正确的方式退出容器,然后配置yum源就可以了。

一台主机上部署:

基于centos:7运行一个容器:

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

[root@f427b815dcee /]#

容器内安装httpd软件:

现在容器中配置好阿里源(centos源和epel源):

[root@f427b815dcee /]# cd /etc/yum.repos.d/

[root@f427b815dcee yum.repos.d]# mv * tmp

先下载centos源,再下载wget:yum -y install wget

最后下载epel源

[root@f427b815dcee /]# yum -y install httpd

通过容器保存为本地镜像:

[root@docker-01 ~]# docker commit -m "centos7_install_httpd" -a zyjy f427b815dcee centos7_httpd:v1

查看镜像:[root@docker-01 ~]# docker images

使用新镜像运行容器:

[root@docker-01 ~]# docker run -it centos7_httpd:v1 /bin/bash

[root@ccb780a72a83 /]#

查看是否有httpd软件:

[root@ccb780a72a83 /]# rpm -qa|grep httpd

两台主机上部署:

通过dockerfile生成本地镜像:

基于dockerfile创建(主要包含四部分):

基础镜像信息:FROM

                     维护者信息:   MAINTAINER

                     镜像操作指令:      RUN

                     容器启动时执行的指令:      CMD

              使用Dockerfile生成镜像:(在Dockerfile文件所在目录)

              docker build  -t  新的镜像名称 .

示例:使用dockerfile生成nginx镜像

做一个nginx网页:

[root@docker-01 ~]# mkdir nginxdir

[root@docker-01 ~]# cd nginxdir/

[root@docker-01 nginxdir]# vim index.html

保存退出

编写dockerfile文件:

[root@docker-01 nginxdir]# vim dockerfile

添加:

FROM centos:7

MAINTAINER "ydw@163.com"

RUN rm -rf /etc/yum.repos.d/*

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD /usr/sbin/nginx

保存退出

生成镜像:[root@docker-01 nginxdir]# docker build -t nginx:v5 .

查看镜像:[root@docker-01 nginxdir]# docker images

使用新的镜像运行容器:

[root@docker-01 ~]# docker run -d -p 80:80 nginx:v5

查看镜像:

真实机浏览器访问:

课后实验

实验一:

  1. 通过cenos:7、nginx:1.20镜像运行几个容器

方法一:先拉取镜像,再运行容器

[root@docker-01 ~]# docker pull centos:7

[root@docker-01 ~]# docker images

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

[root@docker-01 ~]# docker ps

方法二:直接运行容器,同时会自动下载镜像

[root@docker-01 ~]# docker run -it nginx:1.20 /bin/bash

[root@docker-01 ~]# docker ps

教学答案:

docker run -it -p 80:80 --name centos_nginx nginx:1.20 /bin/bash

docker run -itd --name centos7 centos:7 /bin/bash

  1. 进入不同容器,分别使用exit和ctrl-p+q方式退出

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

[root@fa9aa3ee81ea /]# exit

[root@docker-01 ~]# docker run -it nginx:1.20 /bin/bash

root@f6b14cc5db87:/# [root@docker-01 ~]#

教学答案:

docker exec -it centos_nginx /bin/bash

exit

docker exec -it centos_nginx /bin/bash

ctrl-p+q

  1. 查看容器状态

[root@docker-01 ~]# docker ps -a

  1. 删除不同状态的容器

删除停止的容器:[root@docker-01 ~]# docker rm fa9aa3ee81ea

删除正在运行的容器:[root@docker-01 ~]# docker rm -f f6b14cc5db87

查看容器是否删除成功:[root@docker-01 ~]# docker ps -a

docker container prune#删除所有Exited容器

实验二:

  1. 用nginx:1.20镜像运行容器,分别以-p和-P方式发布服务

[root@docker-01 ~]# docker images

[root@docker-01 ~]# docker run -d -p 80:80 nginx:1.20

[root@docker-01 ~]# docker ps -a     看到端口为80

[root@docker-01 ~]# docker run -d -P nginx:1.20

[root@docker-01 ~]# docker ps     看到端口为32768(随机的)

教学答案:

docker run -itd -p 80:80 --name nginx_v1 nginx:1.20

docker run -itd -P --name nginx_v2 nginx:1.20

  1. 查看容器日志和ip地址

查看所有的容器:[root@docker-01 ~]# docker ps -a

[root@docker-01 ~]# docker logs f0c7732c1a38

[root@docker-01 ~]# docker inspect f0c7732c1a38

教学答案:

docker logs nginx_v1

docker inspect 容器id

  1. 分别用宿主机和windows客户端访问网站

宿主机上使用命令curl访问:

[root@docker-01 ~]# curl http://192.168.10.11

[root@docker-01 ~]# curl http://192.168.10.11:32768

  1. 更换默认网站内容

[root@docker-01 ~]# vim index.html

添加:

保存退出

删除所有的容器:[root@docker-01 ~]# docker rm -f $(docker ps -aq)

重新创建容器并挂载自定义内容:

[root@docker-01 ~]# docker run -d -p 80:80 --name nginx-p -v $(pwd)/index.html:/usr/share/nginx/html/index.html nginx:1.20

教学答案:

在宿主机上编辑一个index.html文件,复制到容器中

echo  “test-page”  >  index.html

docker cp index.html 容器ID:/usr/share/nginx/html/index.html

  1. 分别用宿主机和windows客户端访问网站

宿主机上访问:

[root@docker-01 ~]# curl http://192.168.10.11

Windows上访问:

实验三:

  1. 用centos:7作为基础镜像,安装nginx软件

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

容器里配置阿里源

[root@7e8b85e2402e yum.repos.d]# yum -y install nginx

  1. 利用容器创建新镜像centos_nginx:v1

[root@docker-01 ~]# docker commit 7e8b85e2402e centos_nginx:v1

[root@docker-01 ~]# docker images

  1. 使用centos_nginx:v1镜像生成新容器

[root@docker-01 ~]# docker run -it centos_nginx:v1 /bin/bash

[root@d5130c5979da /]#

  1. 进入容器查看nginx是否存在

[root@d5130c5979da /]# rpm -qa|grep nginx

实验四:

  1. 使用Dockerfile生成nginx:v1镜像

编写Dockerfile文件:

[root@docker-01 ~]# vim Dockerfile

添加:

FROM centos:7

MAINTAINER "shian@163.com"

RUN rm -rf /etc/yum.repos.d/*

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD /usr/sbin/nginx

[root@docker-01 ~]# docker build -t nginx:v1 .

[root@docker-01 ~]# docker images

教学答案:

mkdir nginxdir

cd nginxdir

vim dockerfile

FROM nginx:latest

COPY index.html /usr/share/nginx/html/index.html

EXPOSE 80

保存退出:wq

创建网页:vim index.html

构建镜像:

docker build -t nginx:v1 .

  1. 通过nginx:v1运行容器,分别使用-p和-P暴露端口

[root@docker-01 ~]# docker run -d -p 80:80 nginx:v1

[root@docker-01 ~]# docker run -d -P nginx:v1

  1. 分别用宿主机和windows客户端访问网站

宿主机上访问:

[root@docker-01 ~]# curl http://192.168.10.11

[root@docker-01 ~]# curl http://192.168.10.11:32770

Windows上访问:

实验五:手动安装nginx并暴露端口(扩展)

  1. 用centos:7运行一个容器,安装wget、nginx、net-tools

[root@docker-01 ~]# docker run -it centos:7 /bin/bash

配置阿里源

[root@ba80ce9864c2 yum.repos.d]# yum -y install nginx net-tools

  1. 运行/usr/sbin/nginx,查看80端口是否打开

[root@ba80ce9864c2 ~]# /usr/sbin/nginx

[root@ba80ce9864c2 ~]# netstat -anptl|grep 80

  1. Ctrl-p+q退出容器

  1. 复制index.html文件到容器/usr/share/nginx/html目录下

[root@docker-01 ~]# docker cp index.html ba80ce9864c2:/usr/share/nginx/html

  1. Docker inspect 容器,查看容器ip

[root@docker-01 ~]# docker inspect ba80ce9864c2

  1. Curl 容器IP,测试服务状态

[root@docker-01 ~]# curl 172.17.0.2

  1. 对外暴露端口:

iptables -t nat -A PREROUTING -d 192.168.10.11 -p tcp --dport 80 -j DNAT --to 172.17.0.2:80

iptables -t filter -A FORWARD -d 172.17.0.0/16 -j ACCEPT

  1. Windows客户端访问:http://192.168.10.11测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值