docker-使用笔记大全②
Micah Two

[[docker 使用笔记①]]

dockerfile 之卷挂载

1
2
3
4
5
6
7
8
9
10
11
# 在/home 下创建一个dockerfile01文件 
FROM centos

VOLUME ["volume01","volume02"]
CMD echo "---------end---------"
CMD /bin/bash

#然后使用
docker build -f dockfile1 -t micah/centos .
# 就可以使用dockfile文件创建一个自定义镜像 镜像名字叫micah/centos 注意开头不能加/ 注意后面要加`.`

共享挂载机制

1
2
3
4
5
6
7
#在docker中,有一种技术可以共享卷挂载的配置,简化了声明过程
#这里我创建俩mysql容器让他们共享数据

docker run --name mysql01 -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

docker run --name mysql02 -p 8003:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

dockerfile 之指令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 这里创建一个属于我自己的centos 添加了vim指令和net-tools工具包
# 首先vim一个dockerfile

FROM centos
MAINTAINER Micah<mxmicah@qq.com>
ENV MYPATH /usr/local/
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo "------------------end-------------------------"
CMD $MYPATH
CMD /bin/bash

# 然后运行
docker build -t micah/mycentos:1.0 -f dockerfile .

# 创建好了就会生成一个叫micah/mycentos:1.0的镜像

#使用docker run 进去之后发现可以使用vim命令

image

指令解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

FROM #引用了哪个源镜像

MAINTAINWER #作者信息 用户名<邮箱>

ENV #环境变量 K V 配对 在后面使用$变量名使用

WORKDIR #工作目录 进入容器时默认文件夹

RUN #运行命令 可以执行一些shell指令

ADD #进入压缩包 会自动解压

VOLUME 挂载卷设置 可映射到宿主机 默认匿名挂载

EXPOSE 暴露端口

CMD 执行命令

ENTRYPOINT 执行命令 但是可追加

COPY 可将文件拷贝到镜像内

镜像的运行构成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#在这里可以使用
docker history 镜像名:版本号 进行查看
#这里以刚刚创建的镜像举例
IMAGE CREATED CREATED BY SIZE COMMENT
f3f91ee2d256 15 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
7dc9bfa1e6b7 15 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "$MYP… 0B
9a8ddc6f60b0 15 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
63b61df71591 15 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
17e97819edde 15 minutes ago /bin/sh -c yum -y install net-tools 30.4MB
c5b1951c5e85 15 minutes ago /bin/sh -c yum -y install vim 69.5MB
7e95cb605431 15 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local/ 0B
b0c3521b3faf 15 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local/ 0B
ba1b2fc7693e 15 minutes ago /bin/sh -c #(nop) MAINTAINER Micah<mxmicah@… 0B
300e315adb2f 9 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 9 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 9 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB

# 可以查看到一些运行信息和构造规则

CMD 和ENTRYPOINT 使用区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#方便创建俩dockerfile
FROM centos
CMD ["ls","-a"]

ENTRYPOINT ["ls","-a"]

#快速构建下
docker build -f xxx -t xxx:x.x .
#创建好了之后执行
docker run id -l
#此时报错 因为CMD命令只是替换,想要执行必须输入完整指令
docker run id ls -l

#在ENTRYPOINT的情况下
#docker run id -l可以完美执行
#命令类似于:
ENTRYPOINT ["ls","-a","-l"]

部署tomcat镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 在服务器上随便创建一个目录 cd进去 执行以下命令
vim Dockerfile

#写入
#-----------------------分割线--------------------------
FROM centos

MAINTAINER Micah<mxmicah@qq.com>

ADD jdk-8u301-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.52.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_301
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.52
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.52
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.52/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out

#-----------------------分割线--------------------------

# 在目录下放入
apache-tomcat-9.0.52.tar.gz jdk-8u301-linux-x64.tar.gz

#都是在官网下载的最新版本

#执行创建指令
docker build -t 名字:版本 .
#ok 此时你已经获得了一个手动制作的镜像

#该镜像启动就会运行tomcat服务器

#运行
docker run -v 想要映射的文件夹:/usr/local/apache-tomcat-9.0.52/webapps -v 想要映射的文件夹:/usr/local/apache-tomcat-9.0.52/logs -d -p 你想要开的公网端口 --name 名字 镜像名字

#此时在自定义映射的文件夹中添加所对应的tomcat项目文件即可部署成功

image

发布到dockerhub 和阿里云

docker hub发布方式:

先在docker hub创建一个账号

然后打开Docker Hub申请一个钥匙

1
2
3
4
5
6
7
8
#登录
docker login --username=用户名 #然后他给你的密码

# 提交
docker tag 镜像id 你的用户名/发布项目名称:版本号
docker push 你的用户名/发布项目名称:版本号
#然后等待即可

阿里云镜像服务

  1. 创建命名空间 创建镜像
  2. 查看帮助文档

docker网络

原理

在创建容器时,会给予一对虚拟网卡 ,给docker0(docker内交换机)一个,给容器一个,docker0同时连接真实网卡(NAT),这样就做到了外网,内网,docker虚拟网都可以ping通(以客户机视角)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@micah-first tomcat-diy]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:0e:fe:d6 brd ff:ff:ff:ff:ff:ff
inet 172.30.66.55/20 brd 172.30.79.255 scope global dynamic eth0
valid_lft 315169565sec preferred_lft 315169565sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:4c:d9:7c:75 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
45: vethee94b65@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether ee:7f:30:9d:3a:57 brd ff:ff:ff:ff:ff:ff link-netnsid 0
71: veth347bc36@if70: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 66:c5:0f:9e:f9:a5 brd ff:ff:ff:ff:ff:ff link-netnsid 1
101: veth2c2ab7f@if100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether c2:eb:e4:40:48:e8 brd ff:ff:ff:ff:ff:ff link-netnsid 3

#其中下面三个网卡就为docker0生成的虚拟网卡

#随便访问一个容器执行 ip addr

[root@micah-first tomcat-diy]# docker exec -it micah-tomcat03 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
100: eth0@if101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

#其中 eth0@if101 就为容器内生成的虚拟网卡

在创建时添加参数--link 容器名字 可以在该容器下的hosts中添加相应的docker0虚拟网络地址,达到通过名字单项连接的效果

比如 docker run --link mysql01 tomcat

[[docker 使用笔记③]]

由 Hexo 驱动 & 主题 Keep
总字数 15.9k 访客数 访问量