docker的dockerfile和网络层和私有仓库的安装
2019-08-03 本文已影响0人
不知道就
一、 dockerfile
类似ansible剧本,大小几kb 手动做镜像:大小几百M+dockerfile
支持自定义容器的初始命令dockerfile主要组成部分: 基础镜像信息
FROM centos:6.9 制作镜像操作指令
RUN yum install openssh-server -y容器启动时执行指令
CMD ["/bin/bash"]
dockerfile 常用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
LABLE 描述,标签
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile其他指令:
COPY 复制文件(不会解压)rootfs.tar.gz
ENV 环境变量
ENTRYPOINT 容器启动后执行的命令
(无法被替换,启容器的时候指定的命令,会被当成参数)
二、Docker四种网络类型
1)、host模式
如果启动容器的时候使用的host模式,
那么这个容器将不会获得一个独立的network namespace,
而是和宿主机之间 公用一个network nanmspase 。
容器将不会虚拟出自己的网卡,配置自己的IP地址,
而是使用宿主机的IP和端。
但是,容器的其他方面,如文件系统,进程列表等还是和宿主机隔离的。
2)、container模式
container模式指定新的容器和已经存在的一个容器共享一个network namespace
而不是和宿主机共用一个network namespace 。
新创建的容器不会创建自己的网卡,配置自己的IP地址,
而是和一个指定的容器共享IP,端口范围等。
同样,两个容器除去网络方面,其他的地方还是隔离的,
如文件系统,进程列表等都还是隔离的,
两个容器的进程可以通过localhost网卡设备通信
3)、none模式
使用none模式,docker容器拥有自己的network namespace ,但是并
不是docker容器的进行任何网络配置的,也就是说,这个docker容器没
有网卡,IP地址,路由等信息。需要我自己为docker容器添加网卡,配
置IP地址等
4)、bridge模式
bridge模式是docker默认的网络配置。
此模式会为每个容器分配到network namespace,设置ip地址和网卡等。
并将宿主机的人连接到一个虚拟网桥上。
二、2docker跨宿主机之间的通讯
1)、macvlan
默认一个物理网卡,只有一个物理mac地址,虚拟多个mac地址
##创建macvlan网络
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -
oparent=eth0 macvlan_1
##设置eth0的网卡为混杂模式
ip link set eth1 promisc on
##创建使用macvlan网络的容器
docker run -it --network macvlan_1 --ip=10.0.0.200 busybox
2)、overlay
http://www.cnblogs.com/CloudMan6/p/7270551.html
###这是个docker的overlay网络实验
待补。。。。。
三、docker registry(私有仓库)
普通的registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
上传镜像到私有仓库: a:给镜像打标签
docker tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
b:上传镜像
docker push 10.0.0.11:5000/centos6-sshd:v3
docker run -d 10.0.0.11:5000/centos6-sshd:v3
如果遇到报错: The push refers to repository[10.0.0.11:5000/centos6.9_ssh] Get
https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPSclient
解决方法: vim /etc/docker/daemon.json
{
"insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
带basic认证的registry
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p htpasswd -Bbn oldboy 123456 >>/opt/registryvar/auth/htpasswd
docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/ -v/opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
--restart=always
###这个是设置开机自启动的
(如果你想在已经创建的docker容器做开机自启动 就用如下命令: docker update --restart=always 这必须写你的容器名字或者ID号)