微服务中的容器技术---Docker(三),Docker仓库、编

2020-12-23  本文已影响0人  singleZhang2010

Docker仓库

在前边我们已经接触到仓库这个内容,修改镜像源那部分,这里继续拓展开来

  1. 创建仓库
> docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry 
  1. 修改配置文件,使之支持http
[root@localhost ~]# cat  /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
  "insecure-registries": ["192.168.0.241:5000"]
}
#重启docker让修改生效
systemctl restart  docker.service
  1. 修改镜像标签
[root@localhost ~]# docker tag docker-test:latest 192.168.0.241:5000/docker-test:latest:1.0
[root@localhost ~]# docker images
  1. 将新打标签的镜像上传镜像到仓库
[root@localhost ~]#  docker push   192.168.0.241:5000/docker-test

带basic认证的仓库

  1. 安装加密工具
[root@localhost ~]# yum install httpd-tools  -y
  1. 设置认证密码
[root@localhost ~]# mkdir /opt/registry-var/auth/ -p
[root@localhost ~]# htpasswd  -Bbn root 123456  > /opt/registry-var/auth/htpasswd
  1. 启动容器,在启动时传入认证参数
[root@localhost ~]#  docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
  1. 使用验证用户测试
# 登陆用户
[root@localhost ~]#  docker login 192.168.0.241:5000
Username: root
Password: 123456
Login Succeeded
#认证文件的保存位置
[root@localhost ~]# cat .docker/config.json 
{
    "auths": {
        "192.168.0.241:5000": {
            "auth": "Y2xzbjoxMjM0NTY="
        },
        "https://index.docker.io/v1/": {
            "auth": "Y2xzbjpIenNAMTk5Ng=="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/17.12.0-ce (linux)"
    }
}

docker-compose编排工具

什么是docker-compose编排工具?
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,我们可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
使用 Dockerfile 定义应用程序的环境。

使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行 docker-compose up 命令来启动并运行整个应用程序。

  1. 安装docker-compose
# 下载pip软件
[root@localhost ~]# yum install -y python2-pip
# 下载 docker-compose
[root@localhost ~]# pip install docker-compose
#国内开启阿里云pip 下载加速:http://mirrors.aliyun.com/help/pypi
#修改pip.conf
#[global]
#index-url = https://mirrors.aliyun.com/pypi/simple/
#[install]
#trusted-host=mirrors.aliyun.com
  1. 编写编排文件
[root@localhost ~]# vim docker-compose.yml
version: '3'
services:
   db:
     image: mysql:5.7
     volumes:
       - /data/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports: 
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
  1. 启动
[root@localhost my_wordpress]# docker-compose up
  #启动方法:docker-compose up
  #后台启动方法:docker-compose up -d
  1. 测试,访问http://192.168.0.241:8000,可以反问到wordpress安装界面

  2. docker-compose配置常用命令


    docker-compose

用PIPEWORK为docker容器配置独立IP

  1. 安装pipework
> wget https://github.com/jpetazzo/pipework/archive/master.zip
>  unzip master.zip 
>  cp pipework-master/pipework  /usr/local/bin/
>  chmod +x /usr/local/bin/pipework
  1. 配置桥接网卡
#安装桥接工具
> yum install bridge-utils.x86_64 -y
  1. 修改网卡配置,实现桥接
# 修改eth0配置,让br0实现桥接
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.241
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=223.5.5.5
# 重启网络
[root@localhost ~]# /etc/init.d/network restart
  1. 运行一个容器镜像测试
> pipework br0 $(docker run -d -it -p 6880:80 --name  httpd_pw httpd) 192.168.0.220/24@192.168.0.254
  1. 在其他主机上测试端口及连通性
[root@localhost ~]# curl 192.168.0.220
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# ping 192.168.0.220 -c 1
PING 192.168.0.220 (192.168.0.220) 56(84) bytes of data.
64 bytes from 192.168.0.220: icmp_seq=1 ttl=64 time=0.043 ms
  1. 再运行一个容器,设置网路类型为none:
[root@localhost ~]# pipework br0 $(docker run -d -it --net=none --name test httpd:2.4) 192.168.0.221/24@10.0.0.254

#再进行测试
[root@localhost ~]# curl 192.168.0.221
<html><body><h1>It works!</h1></body></html>
  1. 重启容器后需要再次指定:
pipework br0 testduliip  172.16.146.113/24@172.16.146.1
pipework br0 testduliip01  172.16.146.112/24@172.16.146.1

结尾

使用容器的建议

  1. 不要以拆分方式进行应用程序发布
  2. 不要创建大型镜像
  3. 不要在单个容器中运行多个进程
  4. 不要再镜像内保存凭证,不要依赖IP地址
  5. 以非root用户运行进程
  6. 不要使用“最新”标签
  7. 不要利用运行中的容器创建镜像
  8. 不要使用单层镜像
  9. 不要将数据存放在容器内

关于Docker容器的监控

上一篇下一篇

猜你喜欢

热点阅读