2020-01-08 Docker入门2

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

 

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 指定工作目录
 
 

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
ADD  http://www.apelearn.com/study_v2/.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


FROM centos   //基于哪个镜像
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel      //安装依赖的包
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .  //下载源码包
RUN tar zxvf nginx-1.8.0.tar.gz                                   //解压源码包
ADD  http://www.apelearn.com/study_v2/.nginx_conf /usr/local/nginx/conf/nginx.conf    //拷贝模板配置文件
创建镜像:

docker build -t centos_nginx  .  
等待时间会很久                 
报错 提示容器不能联网
解决方法重启docker
 
错误2
docker  images //可以看到我们新建的镜像
docker run - itd -p 8088:80 centos_nginx bash
访问端口

 

 
 

用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 查看

version: "2"
services:
  app1:
    image: centos_nginx
    ports:
      - "8080:80"
    networks:
      - "net1"
    volumes:
      - /data/:/data
  app2:
    image: centos_with_net
    networks:
      - "net2"
    volumes:
      - /data/:/data1
    entrypoint: tail -f /etc/passwd
networks:
  net1:
    driver: bridge
  net2:
    driver: bridge

• docker-compose up -d 可以启动两个容器

实际只启动了一个使用官方默认的centos镜像是没办法两个都启动,但是我们自己使用dockerfile做的镜像可以因为compose里包含了一条tail -f  命令

先stop                                                              

• docker-compose --help 查看compose 支持哪些指令

清空已经停止的容器

• docker-compose ps/down/stop/start/rm

• 关于docker-compose语法的参考文档 http://www.web3.xin/index/article/182.html

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值