第四十二课预习任务 Docker 配置服务

1. Docker网络模式

2. Docker网络管理-外部访问容器

2.1 Operation not permitted

3.Docker网络管理-配置桥接网络

4.Dockerfile创建镜像 – Dockerfile格式

5.Dockerfile创建镜像 – Dockerfile示例

6.用Docker compose部署服务


1. Docker网络模式

  •   host模式,使用docker run时使用--net=host指定
  •  docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机ip
  •  container模式,使用--net=container:container_id/container_name
  •  多个容器使用共同的网络,看到的ip是一样的
  •  none模式,使用--net=none指定
  •  这种模式下,不会配置任何网络
  •  bridge模式,使用--net=bridge指定默认模式,不用指定默认就是这种网络模式。这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。

2. Docker网络管理-外部访问容器

  •  首先使用centos镜像新建一个容器,然后在该容器中安装httpd服务,并启动
  •  再把该容器导成一个新的镜像(centos-httpd),然后再使用新镜像创建容器,并指定端口映射
  •  docker run -itd -p 5123:80 centos-httpd bash  //-p 可以指定端口映射,本例中将容器的80端口映射为本地的5123端口
  •  docker exec -it container_id  bash 
  •  启动httpd: httpd -k start 
  •  编辑1.html: vi /var/www/html/1.html 随便写点东西
  •  退出该容器:exit
  •  测试: curl 127.0.0.1:5123/1.html 
  •  -p后面也支持IP:port:ip:port 的格式,比如
  •  -p 127.0.0.1:8080:80 
  •  也可以不写本地的端口,只写ip,这样会随意分配一个端口
  •  -p 127.0.0.1::80 //注意这里是两个冒号

2.1 Operation not permitted

  •  新建的容器,启动nginx或者httpd服务的时候会报错
  •  Failed to get D-Bus connection: Operation not permitted
  •  这是因为dbus-daemon没有启动,解决该问题可以这样做
  •  启动容器时,要加上--privileged -e "container=docker" ,并且最后面的命令改为/usr/sbin/init
  •  docker run -itd --privileged -e "container=docker" centos_with_nginx /usr/sbin/init

3.Docker网络管理-配置桥接网络

  • 为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。
  •  cd /etc/sysconfig/network-scripts/; cp ifcfg-eth0  ifcfg-br0
  •  vi ifcfg-eth0 //增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1
  •  vi ifcfg-br0//修改DEVICE为br0,Type为Bridge,把eth0的网络设置设置到这里来
  •  systemctl restart network
  •  安装pipwork
  •  git clone https://github.com/jpetazzo/pipework
  •  cp pipework/pipework /usr/local/bin/
  •  开启一个容器 
  •  docker run -itd --net=none --name aming123 centos_with_nettool  bash
  •  pipework br0  aming123 172.7.15.201/24@172.7.15.3  #201为容器的ip,@后面的ip为网关ip
  •  docker exec -it aming123 bash #进去后ifconfig查看就可以看到新添加的ip

4.Dockerfile创建镜像 – Dockerfile格式

  • 1. FROM   //指定基于哪个基础镜像
  •  格式 FROM <image> 或者  FROM <image>:<tag>,  比如
  •  FROM centos
  •  FROM centos:latest
  •  2. MAINTAINER  //指定作者信息
  •  格式  MAINTAIN <name> ,比如
  •  MAINTAINER  aming  aming@aminglinux.com
  •  3. RUN   //镜像操作指令
  •  格式为 RUN <command>  或者 RUN [“executable”, “param1”, “param2”],比如
  •  RUN  yum install  httpd
  •  RUN ["/bin/bash", "-c", "echo hello"]
  •  4. CMD  // 三种格式:
  •  CMD ["executable", "param1", "param2"]
  •  CMD command param1 param2
  •  CMD ["param1", "param2"]
  •  RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如
  •  CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]
  •  5. EXPOSE  
  •  格式为 EXPOSE <port> [<port>...] , 比如
  •  EXPOSE 22 80 8443 这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。
  •  6. ENV  
  •  格式 ENV  <key> <value>, 比如  
  •  ENV PATH /usr/local/mysql/bin:$PATH
  •  它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量
  •  ENV MYSQL_version 5.6
  •  7. ADD  格式 add <src> <dest>
  •  将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。比如
  •  ADD <conf/vhosts> </usr/local/nginx/conf>
  •  8. COPY  
  •  格式同add
  •  使用方法和add一样,不同的是,它不支持url
  •  9. ENTRYPOINT  格式类似CMD
  •  容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:
  •  CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。比如,容器名字为aming
  •  我们在Dockerfile中指定如下CMD:
  •  CMD ["/bin/echo", "test"]
  •  启动容器的命令是  docker run aming 这样会输出 test
  •  假如启动容器的命令是 docker run -it aming  /bin/bash  什么都不会输出
  •  ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行
  •  ENTRYPOINT ["echo", "test"]
  •  docker run -it aming  123
  •  则会输出 test  123 ,这相当于要执行命令  echo test  123
  •  10. VOLUME
  •  格式  VOLUME ["/data"]
  •  创建一个可以从本地主机或其他容器挂载的挂载点。
  •  11. USER  
  •  格式 USER daemon
  •  指定运行容器的用户
  •  12. WORKDIR  
  •  格式 WORKDIR  /path/to/workdir
  •  为后续的RUN、CMD或者ENTRYPOINT指定工作目录

5.Dockerfile创建镜像 – Dockerfile示例

  • 先下载nginx的配置文件 
  •  wget http://www.apelearn.com/study_v2/.nginx_conf
  •  vim Dockerfile //内容如下
  •  ## Set the base image to CentOS
  •  FROM centos
  •  # File Author / Maintainer
  •  MAINTAINER aming aming@aminglinux.com
  •  # Install necessary tools
  •  RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
  •  # Install Nginx
  •  ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
  •  RUN tar zxvf nginx-1.8.0.tar.gz
  • RUN mkdir -p /usr/local/nginx
  •  RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install
  •  RUN rm -fv /usr/local/nginx/conf/nginx.conf
  •  COPY .nginx_conf /usr/local/nginx/conf/nginx.conf
  •  # Expose ports
  •  EXPOSE 80
  •  # Set the default command to execute when creating a new container
  •  ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd
  •  创建镜像:
  •  docker build -t centos_nginx  .
  •  docker  images //可以看到我们新建的镜像
  •  docker run -itd -p 8088:80 centos_nginx bash

6.用Docker compose部署服务

  • docker compose可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信息。我们可以在一个compose文件中定义一个多容器的应用(比如jumpserver),然后通过该compose来启动这个应用。
  •  安装compose方法如下
  •  curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  •  chmod 755 !$
  •  docker-compose version 查看版本信息
  •  Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。
  •  vim docker-compose.yml //内容到https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/25docker/docker-compose.yml 查看
  •  docker-compose up -d 可以启动两个容器
  •  docker-compose --help
  •  docker-compose ps/down/stop/start/rm 
  •  关于docker-compose语法的参考文档 http://www.web3.xin/index/article/182.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值