[[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命令
指令解释
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项目文件即可部署成功
发布到dockerhub 和阿里云 docker hub发布方式: 先在docker hub创建一个账号
然后打开Docker Hub 申请一个钥匙
1 2 3 4 5 6 7 8 # 登录 docker login --username=用户名 #然后他给你的密码 # 提交 docker tag 镜像id 你的用户名/发布项目名称:版本号 docker push 你的用户名/发布项目名称:版本号 # 然后等待即可
阿里云镜像服务
创建命名空间 创建镜像
查看帮助文档
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(不推荐) 在创建时添加参数--link 容器名字
可以在该容器下的hosts中添加相应的docker0虚拟网络地址,达到通过名字单项连接的效果
比如 docker run --link mysql01 tomcat
[[docker 使用笔记③]]