tenth_docker私有仓库_定制镜像_saltstack

 

1.docker 私有仓库

  1.官方提供的私有仓库docker registry用法   https://yeasy.gitbooks.io/docker_practice/repository/registry.html

# 下载registry
docker pull registry
# 私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下
# 端口映射容器中的5000端口到宿主机的5000端口
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

# 检查启动的registry容器
docker ps -a
# 测试连接容器
telnet 192.168.119.10 5000
# 修改镜像tag,以docker registry的地址端口开头
docker tag hello-world:latest 192.168.1.55:5000/hello-world:latest
# 查看docker镜像,找到registry的镜像
docker images

# Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据
[root@master /]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["http://95822026.m.daocloud.io"],
  "insecure-registries":["192.168.119.10:5000"]
}
# 写入到docker服务中,写入到[Service]配置块中,加载此配置文件
# vim /lib/systemd/system/docker.service
添加一行配置
EnvironmentFile=-/etc/docker/daemon.json

# 修改了docker配置文件,重新加载docker
systemctl daemon-reload
# 重启docker
systemctl restart docker 
# 重启了docker,刚才的registry容器进程挂掉了,因此重新启动它
docker ps -a
docker start 容器id

# 推送本地镜像
docker push 192.168.1.55:5000/hello-world   # 为什么要启动容器再推送
# 在以下连接访问即可查看
http://192.168.1.55:5000/v2/_catalog

# 删除本地镜像,从私有仓库中下载
docker rmi -f `docker images -aq`
docker pull 192.168.1.55:5000/hello-world

 链接

 

2.docker 定制镜像:利用dockerfile定制

1. FROM参数(指定基础镜像)
FROM scratch # 制作base image基础镜像,尽量使用官方的image作为base image
FROM centos # 以centos为基础镜像,进行二次构建镜像
FROM ubuntu:14.04 # 带有tag的base image

2. LABEL参数(标签, 定义作者信息)
LABEL version=“1.0” # 容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“lxh661314@163.com"

3. RUN参数(是一个万能指令,执行命令)
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim \
    Python-dev # 反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

4. WORKDIR参数(相当于linux的cd命令)
WORKDIR /root # 相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test # 如果没有就自动创建
WORKDIR demo # 再进入demo文件夹
RUN pwd     # 打印结果应该是/test/demo

5. ADD参数(把宿主机的一个文件,添加到容器空间内)
ADD /opt/django/manage.py /opt/  # 把宿主机的/opt/django/manage.py放到容器空间内的/opt/目录下
ADD /opt/python3.6.tar.gz /opt/  # ADD的解压文件作用,将宿主机的/opt/下的python3.6.tar.gz解压到容器内的/opt/目录下
ADD and COPY
ADD hello /  #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz /  #添加到根目录并解压

WORKDIR /root
ADD hello test/  # 进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/  # 等同于上述ADD效果

6. COPY参数(拷贝指令)
# 将宿主机的文件, 拷贝到容器内,但是没有解压缩的命令,尽量使用COPY,不要使用ADD
COPY filename /opt/

ADD与COPY
   - 优先使用COPY命令
    -ADD除了COPY功能还有解压功能
添加远程文件/目录使用curl或wget

7. ENV参数(docker的环境参数指令)
ENV # 环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 # 设置一个mysql常量,这个${MYSQL_VERSION}类似于全局常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}”  # 如果版本号有变更,则只需要改这个常量就可以了
# 案例,利用dockerfile 自定在django镜像
docker images  # 查看镜像
# 在/opt下建立了docker目录,下载一个django-2.1.7的源码包,touch Dockerfile和run.sh,其中run.sh是用来执行Django的bash脚本,Dockerfile即为自动build python的文件,此文中的核心也是Dockerfile.下载阿里云扩展源epel.repo文件,也放在此目录
wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz
wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 然后新建一个Dockerfile,在这里面编写(没有则创建)
FROM centos
MAINTAINER TigerLee

ADD epel.repo /etc/yum.repos.d  # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
RUN yum update -y  # 运行命令

RUN yum install -y python36
RUN yum install -y python36-pip
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/

WORKDIR /opt/  # 进入/opt目录
RUN mv Django-2.1.7 django  # 运行命令mv

WORKDIR /opt/django    # 进入/opt/django目录
RUN python3 setup.py install

WORKDIR /opt
RUN django-admin.py startproject qishi3dj

ADD run.sh /opt/qishi3dj/run.sh
WORKDIR /opt/qishi3dj
RUN chmod 777 run.sh
EXPOSE 9090  # 声明容器端口
CMD ["/bin/sh","run.sh"]  # 容器启动时默认执行的命令
# 简洁模式
FROM centos
MAINTAINER TigerLee

ADD epel.repo /etc/yum.repos.d
RUN yum update -y

RUN yum install -y python36
RUN yum install -y python36-pip
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/

WORKDIR /opt/
RUN mv Django-2.1.7 django

WORKDIR /opt/django
RUN python3 setup.py install

WORKDIR /opt
RUN django-admin.py startproject qishi3dj

ADD run.sh /opt/qishi3dj/run.sh
WORKDIR /opt/qishi3dj
RUN chmod 777 run.sh
EXPOSE 9090
CMD ["/bin/sh","run.sh"]
# 编写run.sh(没有则创建)
python3 manage.py runserver 0.0.0.0:8000
# 开始构建
[root@tiger docker]# sudo docker build -t tiger/django217 .

# 此时后台启动镜像,并把8000端口映射出来
[root@tiger docker]# docker run -d -p 9090:8000  tiger/django-217
# 使用交互式模式进入容器,再使用ps -ef查看运行的进程
[root@tiger docker]# docker exec -it 5c4 /bin/bash
[root@5c4d0613a97b qishi3dj]# ps -ef 

# 使用和调试
# 执行完以上四个步骤,已经可以使用这个封装了django的镜像,接下来查看一下登陆界面
# 如果需要查看log日志,可以使用如下命令,-f代表持续打印:
docker logs -f container_id
# 如需修改,进入容器种修改web内容
# 导出镜像
root@tiger docker]# docker save -o centos_django217.tar.gz tiger/django-217
      -o 参数  指定地址和文件名   镜像名

 链接

3.saltstack

# saltstack 部署
# 确保主从两台机器能正常通信
ping ipv4
# 修改两台机器的/etc/hosts强制解析(公司会搭建一个私有dns服务器)
192.168.1.55 localhost
# 关闭两台机器的防火墙策略
一个是selinux
另一个是防火墙firewalld

# 下载安装master端和minion端(要先配好阿里云源,Centos7和epel)
https://opsx.alibaba.com/mirror  # 阿里云镜像
# 在master端安装
yum install -y salt-master
# 在minion端安装
yum install -y salt-minion

# 配置master端和minion端配置文件
vim /etc/salt/master  # 配置master
# 加入以下内容
interface: 0.0.0.0
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
pidfile: /var/run/salt-master.pid
log_file: /var/log/salt/master

vim /etc/salt/minion# 配置minion
master: localhost  # 这里hosts命名的
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion

# 分别启master端和minion端
systectl start salt-master  # 在master服务器上
systemctl start salt-minion  # 在minion服务器上
# salt基本使用(在master的操作)
# alt-key -L 查看所有子节点服务器的key(密钥)
# salt-key -a bbb  接收bbb服务器的key(密钥)  # master里的hosts改的名字
# salt-key -A 接收所有服务器的key(密钥)
# salt "bbb" cmd.run "ifconfig"  获取bbb这台机器的所有IP信息
# salt "*" cmd.run "yum install -y nginx"  获取所有被管理机器(已接收密钥的机器)的所有IP信息
# salt-key -d bbb 删除指定被管理端的key
# salt-key -r xiaochun 吊销被管理端的key
# salt-key -f huafeng  获取被管理端的key
# salt-call --local key.finger 在被管理端执行,可以获取自己的key
# salt '*' test.fib 50 test.fib生成斐波那契数列
# salt 'huafeng' grains.items 获取被管理端的所有信息
# salt 'huafeng' grains.item host,ipv4 获取指定信息
# 将从被管理端获取的信息通过yaml语法展示出来
# 将从被管理端获取的信息通过json语法展示出来

链接

5.yaml语法

语法规则
    大小写敏感
    使用缩进表示层级关系   
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行
yaml支持的数据结构
    对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量: 单个不可再分的值

# 案例
兴业组:  
    - 二师兄
    - 兆毅
    - 强哥
陈英组: 
    - 班长
    - 增增
    - 强强

 

posted @ 2019-04-10 17:44  pythonernoob  阅读(176)  评论(0)    收藏  举报