docker

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号)


上一篇下一篇

猜你喜欢

热点阅读