•
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