docker-高级使用

环境准备

准备三台虚拟机及其分别设置对应的IP地址:
web1:192.168.200.100 (安装docker-ce)
web2:192.168.200.200 (安装docker-ce)
proxy: 192.168.200.2 (安装docker仓库)

Dockerfile

** Dockerfile语法格式:**
-FROM:基础镜像
-MAINTAINER:镜像创建者信息
-EXPOSE:开放的端口
-ENV:设置变量
-ADD:复制文件到镜像
-RUN:制作镜像时执行的命令,可以有多个
-WORKDIR:定义容器默认工作目录
-CMD:容器启动时执行的命令,经可以有一条CMD

Dockerfile自定义镜像实例

** 1) 新建一个目录,并进入这个目录,作为命令执行的当前路径,复制一个配置yum源的repo文件到这个目录,然后编辑一个名为Dockerfile的文件,内容如下: **
#使用centos7.9:latest镜像作为基础镜像
FROM centos7.9:latest
#在新建镜像中删除/etc/yum.repos.d/中所有文件
RUN rm -f /etc/yum.repos.d/*
#复制当前目录中用于配置yum源的entOS-Http.repo文件到新建镜像中
ADD CentOS-Http.repo /etc/yum.repos.d/CentOS-http.repo
#在新建镜像中安装指定的软件包
RUN yum install -y vim net-tools psmic iproute openssl openssh-server openssh-askpass openssh-clients
** 2) 然后在当前路径下执行,执行创建自定义镜像:docker build -t test:latest . # -t指定新建镜像的名称; .指定Dockerfile文件在当前路径下在命令执行结束后,用docker images命令可以查看到新创建的镜像test:latest **
在这里插入图片描述
在这里插入图片描述
** 3)运行这个自定义镜像,并进行测试:**
在这里插入图片描述
** 3) 设置容器默认启动命令 **
** a) 制作一个镜像,用这个镜像启动容器后,服务为python **
新建一个目录 docker1,并且切换到这个目录中,编辑一个Dockerfile文件,文件内容如下:
FROM centos7.9:latest # 指定基础镜像
CMD ["/usr/bin/python"] # 指定容器启动时使用的默认命令
然后执行命令:docker build -t centos:python .
用这个自定义镜像启动一个容器:docker run -it centos:python
此镜像启动的容器,直接进入了python环境
在这里插入图片描述
** b) 制作一个镜像,用这个镜像启动容器后,服务为sshd **
新建一个目录docker2, 并且切换到这个目录中,把配置yum源的repo复制到这个目录中,然后编辑一个Dockerfile文件,文件内容如下:
FROM centos7.9:latest
RUN rm -f /etc/yum.repos.d/*
ADD CentOS-Http.repo /etc/yum.repos.d/CentOS-http.repo
#安装sshd服务以及依赖的软件包
RUN yum install -y openssh-server initscripts
RUN sshd-keygen
#设置容器的root密码
RUN echo “abcd1234” | passwd --stdin root
#设置sshd服务所需的环境变量
ENV EnvironmentFile=/etc/sysconfig/sshd
#开发这个容器22号端口
EXPOSE 22
#启动容器的ssh服务
CMD ["/usr/sbin/sshd","-D"]
执行以下命令可以创建新的镜像:docker build -t centos:sshd .
在这里插入图片描述
用新创建的镜像启动一个容器,并在宿主机上用ssh连接这个容器,输入密码后,就可以远程登录这个容器。

** 3) 制作一个镜像,用这个镜像启动容器后,直接启动apache服务 **
新建一个目录apache, 然后把配置yum源的repo文件复制到这个目录下。
切换到apache目录中,在当前路径中编辑一个名为Dockerfile,内容如下:
FROM centos7.9:latest
MAINTAINER yuyuyuliang00 xxxxx00@163.com
RUN rm -f /etc/yum.repos.d/*
ADD CentOS-Http.repo /etc/yum.repos.d/CentOS-http.repo
RUN yum install -y httpd
WORKDIR /var/www/html
ADD index.html index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
ENV PS1=’[web2@\h \W]$ ’
EXPOSE 80
CMD ["/usr/sbin/httpd", “-DFOREGROUND”]
在当前路径下编辑一个index.html,用于复制到容器的工作目录/var/www/html下。
运行docker build -t centos:httpd .创建一个新的镜像。
在这里插入图片描述
用刚才新创建的镜像启动一个容器,然后在宿主机上用curl命令访问这个容器的web服务,访问成功。
在这里插入图片描述
** 4) 制作一个镜像,用这个镜像启动容器后,直接启动sshd和apache服务 **
以centos:sshd镜像为基础,再构建一个httpd服务的镜像
新建一个目录docker3,切换到这个目录下,在这个新目录中新建一个index.html文件,其内容如下:
在这里插入图片描述
编辑一个start.sh文件,内容如下,并且用chmod +x start.sh设置这个文件的执行权限:
在这里插入图片描述
编译用于创建新镜像的Dockerfile文件,内容如下:
在这里插入图片描述
用上面的Dockerfile文件创建新的镜像centos:sshd_httpd:
在这里插入图片描述
用以上的镜像启动一个容器,并验证其sshd和httpd服务,都能成功访问:
在这里插入图片描述
进入容器内部,查看其监听端口与对应的进程:
在这里插入图片描述

自定义仓库

环境准备

**1、 安装私有仓库(服务端) **
在proxy(192.168.200.2)上创建私有镜像仓库:yum install docker-distribution
在这里插入图片描述

2、启动私有仓库,并设置开机自启
在这里插入图片描述
启动服务后,其监听端口是5000:
在这里插入图片描述
查看当前镜像仓库中的数据,当前仓库中没有镜像:
在这里插入图片描述

3、仓库配置文件及数据存储路径
1) /etc/docker-distribution/registry/config.yml
2) /var/lib/registry

4、修改客户端配置
在客户端(web1,web2)上修改配置文件:

  1. 在/etc/docker/目录下新建一个文件:daemon.json,然后添加如下内容,指定私有仓库地址和用非安全方式(http)
  2. 重启客户端docker程序:systemctl restart docker
    3)在客户端为上传镜像打上标签: docker tag 本地镜像名:标签 <上传私有仓库地址:端口>/镜像名:标签
    在这里插入图片描述

上传镜像到私有仓库

用法:docker push <本地镜像名[格式:私有仓库地址:端口/镜像名:标签]>
在这里插入图片描述
检查:查看私有仓库中所有仓库以及指定仓库中所有镜像:
所有仓库:curl http://192.168.200.2:5000/v2/_catalog
指定仓库下所有镜像:curl http://192.168.200.2:5000/v2/<仓库名>/tags/list
在这里插入图片描述
在web1上用私有仓库中的镜像启动一个容器,并进行测试:
1) 复制web2上配置文件到web1
2) 重启docker
3) 以私有仓库中镜像启动一个容器
4)进行web和ssh测试
在这里插入图片描述
在这里插入图片描述

删除私有仓库中的镜像

** 准备工作 **
编辑/etc/docker-distribution/registry/config.yml,内容如下:
在这里插入图片描述
** 在客户端操作 **

  1. 先上传一个本地镜像到私有仓库
    2)查看私有仓库中的镜像,多了一个lastest标签
    3)查看私有仓库中centos:lastest镜像的sha码
    4)删除私有仓库中centos:latest标签
    在这里插入图片描述
    ** 在proxy上进行垃圾回收 **
    在这里插入图片描述

容器的数据持久化存储:主机卷的映射

** 将真实机目录挂载到容器中提供持久化存储: **
1)目录不存在就自动创建
2)目录存在就直接覆盖掉
** 演示映射本地目录到容器中: **
1) 在主机上新建一个目录/var/webroot,在此目录中新建一个index.html文件,内容如下:
2) 在启动这个容器时,加上-v参数指定映射到<容器内目录>的<主机目录>
3) 访问提供web服务的容器,内容就是主机目录/var/webroot/下的index.html
在这里插入图片描述

docker网络

1)新建子网: docker network create --subnet=10.10.10.0/24 docker1
在这里插入图片描述
2)使用自定义网桥,启动容器:
在启动命令中使用–network指定容器要连接的网桥
在这里插入图片描述

端口映射

1) 默认容器可以访问外网
2)外网的主机不可以访问容器内的资源
3)容器的特征是把属组机变成对应的服务
演示:
1)在启动容器时,用-p选项绑定宿主机端口和容器内端口,-v绑定宿主机目录和容器内目录
2) 编辑宿主机文件/var/webroot/index.html,内容如下:
3)切换到与web2处于同一局域网的proxy主机上,在proxy上访问web2的80端口,可以获取运行在web2上容器提供的web网页。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值