容器镜像管理 容器网络 私有仓库配置

容器镜像管理 容器网络 私有仓库配置

镜像制作

Commit打包镜像
docker images # 查看当前镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              491198851f0c        27 hours ago        1.23MB
redis               latest              82629e941a38        2 years ago         95MB
nginx               latest              42b4762643dc        2 years ago         109MB
ubuntu              latest              20bb25d32758        2 years ago         87.5MB
centos              latest              76d6bc25b8a5        2 years ago         200MB


docker run --name mytest -it centos:latest  
7d7560a14f44 

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
yum install -y net-tools vim-enhanced tree bash-completion iproute psmisc && yum clean all 

#下载新的东西 yum源用华为云内网的
exit  #退出

docker commit 7d7560a14f44 myos:latest  #创建新的镜像
sha256:88033a9fc1ca104a2e4e3f609b5ea885158e5fee20bc5a268d313ded75210f06

docker  images   #查看镜像
#新的myos镜像
myos                latest              88033a9fc1ca        3 minutes ago       281MB 
busybox             latest              491198851f0c        27 hours ago        1.23MB
redis               latest              82629e941a38        2 years ago         95MB
nginx               latest              42b4762643dc        2 years ago         109MB
ubuntu              latest              20bb25d32758        2 years ago         87.5MB
centos              latest              76d6bc25b8a5        2 years ago         200MB
Dockerfile打包镜像
  • Dockerfile语法 docker build -t 镜像名称:标签 Dockerfile所在目录
语法指令语法说明
FROM基础镜像
RUN制作镜像时执行的命令,可以有多个
ADD复制文件到镜像,自动解压 url文件下载(不建议下载 会创建更多的镜像层 使用curl wget代替)
COPY复制文件到镜像,不解压 --from=0 参数可以把前一阶段的产物拷贝到当前的镜像中
EXPOSE声明开放的端口
ENV设置容器启动后的环境变量
WORKDIR定义容器默认工作目录(cd命令)
CMD容器启动时执行的命令,仅可以有一条CMD

tip 加速镜像技巧

使用COPY和ADD命令时,可以通过把一些不容易发生变化的文件拷贝操作放到较低的镜像层中,这样在重新build镜像时就会使用前面build产生的缓存

ls
config.py   #配置文件  基本不动
web.py   #经常修改的配置文件

vim Dockerfile   
====================
....
WORKDIR /config
COPY config.py .         #将不容易修改的放到较低的镜像层
WORKDIR /html
COPY web.py .               #将容易修改的配置文件放到后面执行
......
=============================
#当执行多次修改build时,修改了web.py     到config.py的COPY都可以直接拿缓存过来生成
  • 制作apache镜像
mkdir web
cd web
vim Dockerfile
============================
FROM myos2:latest
RUN yum install -y httpd php 
ENV LANG=C
ADD webhome.tar.gz /var/www/html/
COPY info.php /var/www/html/
WORKDIR /var/www/html/
EXPOSE  80
CMD    ["/usr/sbin/httpd","-DFOREGROUND"]  #逗号没写,导致运行容器没有默认正确启动命令  查半天
=========================================
docker build -t myos:httpd .  #Dockerfile在当前目录下  webhome.tar.gz也在当前目录下

docker  run -itd --name php -p 8080:80 myos:httpd   #80端口映射到宿主机的8080端口
curl http://172.17.0.2/index.php #访问
hello php Dockerfile   #成功访问到.php结尾的网页   放在webhome.tar.gz里面了

docker exec -it php /bin/bash   #进去看下
[root@fb137501c1c0 html]#                   #WORKDIR设置了 进去就是/var/www/html/了


#绑定公网IP
公网IP:8080   #对外发布了
  • 制作php-fpm镜像
yum install -y php-fpm
mkdir php; cd php
cp /etc/php-fpm.d/www.conf ./
vim www.conf
=========================
12: listen = 0.0.0.0:9000          #监听所有9000端口
24: ;listen.allowed_clients = 127.0.0.1   #注释掉只允许本机访问9000的这行
=======================================
cp /root/info.php   ./    #复制info.php到当前目录下

vim Dockerfile
===============================
FROM myos:latest
RUN yum install -y php-fpm
COPY www.conf /etc/php-fpm.d/www.conf
EXPOSE 9000
WORKDIR /usr/local/nginx/html
COPY info.php info.php
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
=================================

docker build -t myos:php-fpm .     #供本机使用 所以不需要绑定宿主机端口  直接使用即可
  • 制作nginx镜像
wget -o /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo  #用阿里的yum源 华为的版本对不上
yum install -y gcc make pcre-devel openssl-devel #安装nginx源码编译所需包 正则 ssl
useradd nginx  #创建用户
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
make && make install 
#源码编译nginx
cd /usr/local/
cp /root/info.php nginx/html/; cp /root/info.html nginx/html/    #复制网页到Nginx网页目录下
tar -czf nginx.tar.gz nginx
mkdir /root/nginx; cd /root/nginx
cp /usr/local/nginx.tar.gz ./  
vim Dockerfile
==============================
FROM myos:latest
RUN  yum install -y pcre openssl && useradd nginx
ADD  nginx.tar.gz /usr/local/        #将自己网页文件压缩包解压放到容器里面
EXPOSE 80
WORKDIR /usr/local/nginx/html
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
===================================
docker build -t myos:nginx  . #制作镜像
  • 容器间网络通信
mkdir -p /var/{webroot,webconf}
cp info.php info.html /var/webroot/
cp /usr/local/nginx/conf/nginx.conf /var/webconf/
vim /var/webconf/nginx.conf  #修改配置文件解析
=============================
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
}
==============================
#启动nginx服务  映射网页目录和配置文件目录
docker run -itd --name nginx -p 80:80 \
-v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf  \
-v /var/webroot:/usr/local/nginx/html myos:nginx

#启动php-fpm服务  映射网页目录
docker run -itd --network=container:nginx \    #container模式  使用上面nginx容器的网络
-v /var/webroot:/usr/local/nginx/html myos:php-fpm    #需要共享网页解析 所以也要共享

curl http://localhost/info.html   #映射了本机端口 所以可以访问了

curl http://localhost/info.php




docker inspcet nginx | grep IPAdd   #过滤出容器网络
 "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
docker inspcet  | grep IPAdd   #过滤php-fpm的网络
 "SecondaryIPAddresses": null,     #使用相同网络命令(Network Namespace)空间
            "IPAddress": "",     #没有独立的IP   共享网络172.17.0.2 两个容器进程通过lo网卡设备通信

iptables -t nat -vnL | grep :80   #查看下nat表  
0     0 MASQUERADE  tcp  --  *      *       172.17.0.2  172.17.0.2           tcp dpt:80
2   100 DNAT       tcp  --  !docker0 *       0.0.0.0/0  0.0.0.0/0    tcp dpt:80 to:172.17.0.2:80     #docker run -p   本质都是对本地iptable的表进行规制设置     上面是把宿主机的转发给了172.17.0.2:80        
  • Docker container网络模式,这种模式可以节约一定的网络资源,并能降低容器间的通信难度,container网络模式使多个容器共享网络环境,在这种模式下容器可以通过访问localhost来访问namespace下的其他容器,网络性能更高

私有仓库配置

主机名IP地址最低配置
registry192.168.1.1001CPU,1G内存
yum install -y docker-distribution
systemctl enable --now docker-distribution
curl http://192.168.1.100:5000/v2/_catalog
{"repositories":[]}
  • docker客户端配置
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"] #私有仓库 Http
}
===============================
docker rm -f $(docker ps -aq)
systemctl restart docker 
  • 上传镜像
docker tag myos:latest 192.168.1.100:5000/myos:latest #建立镜像标签
docker push 192.168.1.100:5000/myos:latest    #上传
  • 验证
curl http://192.168.1.100:5000/v2/_catalog
{"repositories":["myos"]}
curl http://192.168.1.100:5000/v2/myos/tags/list
{"name":"myos","tags":["latest"]}

docker run -it 192.168.1.100:5000/myos:latest  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值