容器的镜像编排

自定义镜像原理

 

镜像管理

commit 打包镜像

docker commit 容器id 新镜像名称:标签

[root@docker-0001 ~]# docker run -it centos:latest
[root@02fd1719c038 ~]# rm -f /etc/yum.repos.d/*.repo
[root@02fd1719c038 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
[root@02fd1719c038 ~]# yum install -y net-tools vim-enhanced tree bash-completion iproute psmisc && yum clean all
[root@02fd1719c038 ~]# exit
[root@docker-0001 ~]# docker commit 02fd1719c038 myos:latest

[root@docker-0001 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                latest              299c5b7f5ad8        2 minutes ago       281MB
nginx               latest              fa5269854a5e        2 weeks ago         142MB
x0                  x0                  fa5269854a5e        2 weeks ago         142MB
busybox             latest              1a80408de790        3 weeks ago         1.24MB
redis               latest              82629e941a38        3 years ago         95MB
ubuntu              latest              20bb25d32758        3 years ago         87.5MB
centos              latest              76d6bc25b8a5        3 years ago         200MB


DockerFiles语法解析

 

 Dockerfile语法

语法指令语法说明
FROM基础镜像
RUN制作镜像时执行的命令,可以有多个
ADD复制文件到镜像,自动解压
COPY复制文件到镜像,不解压
EXPOSE声明开放的端口
ENV设置容器启动后的环境变量
WORKDIR定义容器默认工作目录(等于cd)
CMD容器启动时执行的命令,仅可以有一条CMD

使用Dockerfile创建镜像

docker build -t 镜像名称:标签 Dockerfile所在目录

制作apache镜像

CMD 指令可以查看 service 文件的启动命令 ExecStart(/lib/systemd/system/httpd.service)

ENV 环境变量查询服务文件中的环境变量配置文件 EnvironmentFile 指定的文件内容

[root@docker-0001 ~]# mkdir apache; cd apache
[root@docker-0001 apache]# vim Dockerfile
FROM myos:latest
RUN  yum install -y httpd php && yum clean all
ENV  LANG=C
ADD  webhome.tar.gz  /var/www/html/
WORKDIR /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
# 拷贝 webhome.tar.gz 到当前目录中
[root@docker-0001 apache]# docker build -t myos:httpd .

 查看与验证镜像

[root@docker-0001 web]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                httpd               db15034569da        12 seconds ago      355MB
myos                latest              867409e412c8        2 hours ago         281MB
[root@docker-0001 web]# docker rm -f $(docker ps -aq)
[root@docker-0001 web]# docker run -itd myos:httpd
[root@docker-0001 web]# curl http://172.17.0.2/info.php
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.29.0
    [REQUEST_URI] => /info.php
)
php_host: 	6c9e124bee1a
1229
 

制作php-fpm镜像

[root@docker-0001 ~]# mkdir php; cd php
[root@docker-0001 php]# vim Dockerfile
FROM myos:latest
RUN  yum install -y php-fpm && yum clean all
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
[root@docker-0001 php]# docker build -t myos:php-fpm .

验证服务

[root@docker-0001 ~]# docker run -itd myos:php-fpm
deb37734e52651161015e9ce7771381ee6734d1d36bb51acb176b936ab1b3196
[root@docker-0001 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS
deb37734e526        myos:php-fpm        "/usr/sbin/php-fpm -…"   17 seconds ago      Up 15 seconds       
[root@docker-0001 ~]# docker exec -it deb37734e526 /bin/bash
[root@deb37734e526 ~]# ss -ltun
Netid  State      Recv-Q        Send-Q          Local Address:Port         Peer Address:Port 
tcp    LISTEN     0             128             127.0.0.1:9000             *:*
[root@deb37734e526 ~]# 

复杂镜像制作

微服务:

 

 

制作nginx镜像

1、制作 nginx 软件包

[root@docker-0001 ~]# yum install -y gcc make pcre-devel openssl-devel
[root@docker-0001 ~]# useradd nginx
[root@docker-0001 ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@docker-0001 ~]# cd nginx-1.12.2
[root@docker-0001 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@docker-0001 nginx-1.12.2]# make && make install
[root@docker-0001 nginx-1.12.2]# # 拷贝 docker-images/info.html和info.php 到 nginx/html 目录下
[root@docker-0001 nginx-1.12.2]# cd /usr/local/
[root@docker-0001 local]# tar czf nginx.tar.gz nginx

2、制作nginx镜像

[root@docker-0001 local]# mkdir /root/nginx ;cd /root/nginx
[root@docker-0001 nginx]# cp /usr/local/nginx.tar.gz ./
[root@docker-0001 nginx]# vim Dockerfile 
FROM myos:latest
RUN  yum install -y pcre openssl && useradd nginx && yum clean all
ADD  nginx.tar.gz /usr/local/
EXPOSE 80
WORKDIR /usr/local/nginx/html
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@docker-0001 nginx]# docker build -t myos:nginx .

验证服务

[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
deb37734e526
[root@docker-0001 ~]# docker run -itd myos:nginx
e440b53a860a93cc2b82ad0367172c344c7207def94c4c438027c60859e94883
[root@docker-0001 ~]# curl http://172.17.0.2/info.html
<html>
  <marquee  behavior="alternate">
      <font size="12px" color=#00ff00>Hello World</font>
  </marquee>
</html>
[root@docker-0001 ~]# 

发布容器服务

对外发布服务

发布web服务

 

 

给 docker-0001 绑定一个公网IP

docker run -itd -p 宿主机端口:容器端口 镜像名称:标签

# 把 docker-0001 变成 apache 服务
[root@docker-0001 ~]# docker run -itd -p 80:80 myos:httpd

# 把 docker-0001 变成 nginx 服务,首先必须停止 apache
[root@docker-0001 ~]# docker stop $(docker ps -q)
[root@docker-0001 ~]# docker run -itd -p 80:80 myos:nginx

验证方式: 通过浏览器访问即可

容器共享卷

 

映射主机卷

docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签

使用共享卷动态修改容器内配置文件

 
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
[root@docker-0001 ~]# mkdir /var/webconf
[root@docker-0001 ~]# cp /usr/local/nginx/conf/nginx.conf /var/webconf/
[root@docker-0001 ~]# vim /var/webconf/nginx.conf
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
[root@docker-0001 ~]# docker run -itd -p 80:80 --name nginx \
                          -v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf myos:nginx

 验证方式: 使用 exec 进入容器查看

[root@docker-0001 ~]# docker exec -it nginx /bin/bash
[root@e440b53a860a html]# cat /usr/local/nginx/conf/nginx.conf
[root@e440b53a860a html]# # 查看 php 相关配置是否被映射到容器内

容器间网络通信

 私有仓库

 

主机名ip地址最低配置
registry192.168.1.1001CPU,1G内存
[root@registry ~]# yum install -y docker-distribution
[root@registry ~]# systemctl enable --now docker-distribution
[root@registry ~]# curl http://192.168.1.100:5000/v2/_catalog
{"repositories":[]}

 

 _catalog : 查看仓库中所有镜像

tags/list:  查看镜像的所有标签

docker客户端配置

所有node节点都需要配置,这里 docker-0001,docker-0002都要配置

native.cgroupdriver cgroup驱动,docker默认 cgroupfs

registry-mirrors 默认下载仓库,使用国内源能快一点

insecure-registries 私有仓库地址(重点)

 

 

[root@docker-0001 ~]# vim /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],    #驱动
    "registry-mirrors": ["https://hub-mirror.c.163.com"], #镜像仓库地址
    "insecure-registries":["192.168.1.100:5000", "registry:5000"] # 私有仓库的ip地址和主机名
}
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
[root@docker-0001 ~]# systemctl restart docker

 上传镜像到私有仓库

# 上传 myos:latest, myos:httpd, myos:nginx, myos:php-fpm
[root@docker-0001 ~]# docker tag myos:latest 192.168.1.100:5000/myos:latest
[root@docker-0001 ~]# docker push 192.168.1.100:5000/myos:latest

 

验证测试

curl http://仓库IP:5000/v2/_catalog

curl http://仓库IP:5000/v2/镜像名称/tags/list

[root@docker-0002 ~]# curl http://192.168.1.100:5000/v2/_catalog
{"repositories":["myos"]}
[root@docker-0002 ~]# curl http://192.168.1.100:5000/v2/myos/tags/list
{"name":"myos","tags":["latest"]}
# 使用远程镜像启动容器
[root@docker-0002 ~]# docker run -it 192.168.1.100:5000/myos:latest
Unable to find image '192.168.1.100:5000/myos:latest' locally
latest: Pulling from myos
7dc0dca2b151: Pull complete 
95c297b4d705: Pull complete 
Digest: sha256:d61ffc053895e2dc16f63b8a2988dfe5f34207b48b1e74d397bb3267650ba4ce
Status: Downloaded newer image for 192.168.1.100:5000/myos:latest
[root@674ebe359e44 /]# 

 

[root@docker-0002 ~]# docker pull 192.168.1.100:5000/myos:httpd  #不启动下载
httpd: Pulling from myos
7dc0dca2b151: Already exists 
de1d98c99419: Already exists 
4e2a4718b9a6: Already exists 
abae5f600b5a: Already exists 
b44ae4762472: Pull complete 
4750b1bcd2a2: Pull complete 
Digest: sha256:41a6487ebe79bba5aaa08833c83b511f3b003c234544846902a98a6bbcc3e65b
Status: Downloaded newer image for 192.168.1.100:5000/myos:httpd
[root@docker-0002 ~]# docker run -it 192.168.1.100:5000/myos:latest   #启动下载
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值