当前位置: 首页 > news >正文

网站开发项目终止协议书达州网站建设yufanse

网站开发项目终止协议书,达州网站建设yufanse,南昌百度推广优化排名,酒楼网站模板第 3 章 Docker 高级实践 在这一部分我们主要来介绍一些Docker的高级内容#xff1a; Dockerfile 和 Docker compose 3.1 Dockerfile Dockerfile我们从下面的几个方面来介绍#xff1a; Dockerfile简介 Dockerfile快速入门 Dockerfile详解 Dockerfile简单 实践 3.1.1 Docke…第 3 章 Docker 高级实践 在这一部分我们主要来介绍一些Docker的高级内容 Dockerfile 和 Docker compose 3.1 Dockerfile Dockerfile我们从下面的几个方面来介绍 Dockerfile简介 Dockerfile快速入门 Dockerfile详解 Dockerfile简单 实践 3.1.1 Dockerfile简介 什么是Dockerfile Dockerfile类似于我们学习过的脚本将我们在上面学到的docker镜像使用自动化的方式实 现出来。 Dockerfile的作用 1、找一个镜像 ubuntu 2、创建一个容器 docker run ubuntu 3、进入容器 docker exec -it 容器 命令 4、操作 各种应用配置 … 5、构造新镜像 docker commit Dockerfile 使用准则 1、大 首字母必须大写D 2、空 尽量将Dockerfile放在空目录中。 3、单 每个容器尽量只有一个功能。 4、少 执行的命令越少越好。 Dockerfile 分为四部分: 基础镜像信息 从哪来 维护者信息 我是谁 镜像操作指令 怎么干 容器启动时执行 指令 嗨 Dockerfile文件内容 首行注释信息 指令(大写) 参数 Dockerfile使用命令 #构建镜像命令格式 docker build -t [镜像名]:[版本号][Dockerfile所在目录] #构建样例 docker build -t nginx:v0.2 /opt/dockerfile/nginx/ #参数详解 -t 指定构建后的镜像信息 /opt/dockerfile/nginx/ 则代表Dockerfile存放位置如果是当前目录则用 .(点)表示3.1.2 Dockerfile快速入门 接下来我们快速的使用Dockerfile来基于ubuntu创建一个定制化的镜像nginx。 #创建Dockerfile专用目录 :~$ mkdir ./docker/images/nginx -p :~$ cd docker/images/nginx/ #创建Dockerfile文件 :~/docker/images/nginx$ vim Dockerfile测试 #创建Dockerfile专用目录--创建Dockerfile文件 chengpengchengpeng:~$ mkdir docker-file/dockerfile/nginx -p chengpengchengpeng:~/docker-file/dockerfile/nginx$ vim Dockerfile--拷贝dockerfile内容dockerfile内容 # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 RUN mkdir hello RUN mkdir world RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN apt-get update RUN apt-get install nginx -y # 对外端口 EXPOSE 80进行构建操作 #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx$ docker build -t ubuntu-nginx:v1.0 . [] Building 18.4s (11/11) FINISHED [internal] load build definition from Dockerfile 0.2s transferring dockerfile: 441B 0.0s [internal] load .dockerignore 0.2s transferring context: 2B 0.0s [internal] load metadata for docker.io/library/ubuntu:latest 0.0s [1/7] FROM docker.io/library/ubuntu 0.0s [2/7] RUN mkdir hello 0.5s [3/7] RUN mkdir world 0.6s [4/7] RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list 0.6s [5/7] RUN sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list 0.6s [6/7] RUN apt-get update 4.7s [7/7] RUN apt-get install nginx -y 10.7s exporting to image 0.3s exporting layers 0.3s writing image sha256:d94bf0f823d0921ffd6474bfe813af5fe526744df6e471cfa70ed9cef5ffdc90 0.0s naming to docker.io/library/ubuntu-nginx:v1.0 #查看新生成镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-nginx v1.0 d94bf0f823d0 About a minute ago 179MB#查看构建历史 chengpengchengpeng:~/docker-file/dockerfile/nginx$ docker history d94bf0f823d0 IMAGE CREATED CREATED BY SIZE COMMENT d94bf0f823d0 5 minutes ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c apt-get install nginx -y # bu… 55.6MB buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c apt-get update # buildkit 45.7MB buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c sed -i s/security.ubuntu.com… 2.42kB buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c sed -i s/archive.ubuntu.com/… 2.42kB buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c mkdir world # buildkit 0B buildkit.dockerfile.v0 missing 5 minutes ago RUN /bin/sh -c mkdir hello # buildkit 0B buildkit.dockerfile.v0 missing 5 minutes ago MAINTAINER panda kstwoak47163.com 0B buildkit.dockerfile.v0 missing 4 weeks ago /bin/sh -c #(nop) CMD [/bin/bash] 0B missing 4 weeks ago /bin/sh -c #(nop) ADD file:63d5ab3ef0aab308c… 77.8MB missing 4 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B missing 4 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B missing 4 weeks ago /bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH 0B missing 4 weeks ago /bin/sh -c #(nop) ARG RELEASE 0B #注意 因为容器没有启动命令所以肯定访问不了优化刚刚的Dockerfile文件 # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 RUN mkdir hello mkdir world RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN apt-get update apt-get install nginx -y # 对外端口 EXPOSE 80 运行修改好的Dockerfile进行构建 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v0.2 . :~/docker/images/nginx$ docker history ubuntu-nginx:v0.2 #对比两个镜像的大小 chengpengchengpeng:~/docker-file/dockerfile/nginx-2$ docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-nginx v2.0 04e3d2ae1f41 52 seconds ago 179MB ubuntu-nginx v1.0 d94bf0f823d0 59 minutes ago 179MB#深度对比连个镜像的大小 :~/docker/images/nginx$ docker inspect 04e3d2ae1f41Size: 179147395,VirtualSize: 179147395, :~/docker/images/nginx$ docker inspect d94bf0f823d0 Size: 179149812,VirtualSize: 179149812, Dockerfile构建过程 从基础镜像1运行一个容器A 遇到一条Dockerfile指令都对容器A做一次修改操作 执行完毕一条命令提交生成一个新镜像 2 再基于新的镜像2运行一个容器B 遇到一条Dockerfile指令都对容器B做一次 修改操作 执行完毕一条命令提交生成一个新镜像3 … 构建过程镜像介绍 构建过程中创建了很多镜像这些中间镜像我们可以直接使用来启动容器通过查看容器 效果从侧面能看到我们每次构建的效果。提供了镜像调试的能力–构建越少大小越小 3.1.3 基础指令详解 FROM FROM #格式 FROM image FROM image:tag #解释 #FROM 是 Dockerfile 里的第一条而且只能是除了首行注释之外的第一条指令 #可以有多个FROM语句来创建多个image--不建议使用 #FROM 后面是有效的镜像名称如果该镜像没有在你的本地仓库那么就会从远程仓库Pull取如果远程也没有就报错失败 #下面所有的 系统可执行指令 在 FROM 的镜像中执行。MAINTAINER MAINTAINER #格式 MAINTAINER name #解释 #指定该dockerfile文件的维护者信息。类似我们在docker commit 时候使用-a参数指定的信息RUN RUN #格式 RUN command (shell模式) RUN[executable, param1, param2] (exec 模式) #解释 #表示当前镜像构建时候运行的命令如果有确认输入的话一定要在命令中添加 -y #如果命令较长那么可以在命令结尾使用 \ 来换行 #生产中推荐使用上面数组的格式 #注释 #shell模式类似于 /bin/bash -c command #举例 RUN echo hello #exec模式类似于 RUN[/bin/bash, -c, command] #举例 RUN[echo, hello]EXPOSE EXPOSE #格式 EXPOSE port [port...] #解释 设置Docker容器对外暴露的端口号Docker为了安全不会自动对外打开端口如果需要外部提供访问 还需要启动容器时增加-p或者-P参数对容器的端口进行分配。 EXPOSE 803.1.4 运行时指令详解 CMD CMD #格式 CMD [executable,param1,param2] (exec 模式)推荐 CMD command param1 param2 (shell模式) CMD [param1,param2] 提供给ENTRYPOINT的默认参数 #解释 #CMD指定容器启动时默认执行的命令 #每个Dockerfile只能有一条CMD命令如果指定了多条只有最后一条会被执行 #如果你在启动容器的时候使用docker run 指定的运行命令那么会覆盖CMD命令。 #举例 CMD [/usr/sbin/nginx,-g,daemon off] /usr/sbin/nginx nginx命令 -g 设置配置文件外的全局指令 daemon off 后台守护程序开启方式 关闭#CMD指令实践: #修改Dockerfile文件内容 #在上一个Dockerfile文件内容基础上末尾增加下面一句话 CMD [/usr/sbin/nginx,-g,daemon off;] #构建镜像 :~/docker/images/nginx$ docker build -t ubuntu-nginx:v3.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-3$ docker run -itd --name unginx-1 ubuntu-nginx:v3.0 #根据镜像创建容器,创建时候添加执行命令/bin/bash chengpengchengpeng:~/docker-file/dockerfile/nginx-3$ docker run -itd --name unginx-2 ubuntu-nginx:v3.0 /bin/bash #发现两个容器的命令行是不一样的 chengpengchengpeng:~/docker-file/dockerfile/nginx-3$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1a0dd1003ab ubuntu-nginx:v3.0 /bin/bash 6 seconds ago Up 5 seconds 80/tcp unginx-2 7cbb79a2acf0 ubuntu-nginx:v3.0 /usr/sbin/nginx -g … 4 minutes ago Up 4 minutes 80/tcp unginx-1ENTRYPOINT ENTRYPOINT #格式 ENTRYPOINT [executable, param1,param2] (exec 模式) ENTRYPOINT command param1 param2 (shell 模式) #解释 #和CMD 类似都是配置容器启动后执行的命令并且不会被docker run 提供的参数覆盖。 #每个Dockerfile 中只能有一个ENTRYPOINT当指定多个时只有最后一个起效。 #生产中我们可以同时使用ENTRYPOINT 和CMD #想要在docker run 时被覆盖可以使用docker run --entrypoint#ENTRYPOINT指令实践 #修改Dockerfile文件内容 #在上一个Dockerfile 文件内容基础上修改末尾的CMD 为ENTRYPOINT ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;] #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker build -t ubuntu-nginx:v4.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker run -itd --name unginx-3 ubuntu-nginx:v4.0 #根据镜像创建容器,创建时候添加执行命令/bin/bash--ENTRYPOINT启动失效了 chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker run -itd --name unginx-4 ubuntu-nginx:v4.0 /bin/bash #查看ENTRYPOINT是否被覆盖 chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74be4034e4ad ubuntu-nginx:v4.0 /usr/sbin/nginx -g … 46 seconds ago Exited (1) 45 seconds ago unginx-4 2b39d1d5475c ubuntu-nginx:v4.0 /usr/sbin/nginx -g … About a minute ago Up About a minute 80/tcp unginx-3 #根据镜像创建容器,创建时候使用--entrypoint参数添加执行命令/bin/bash chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker run --entrypoint /bin/bash --name nginx-5 -itd ubuntu-nginx:v4.0 #查看ENTRYPOINT是否被覆盖 chengpengchengpeng:~/docker-file/dockerfile/nginx-4$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b28c789c5ec ubuntu-nginx:v4.0 /bin/bash 3 seconds ago Up 2 seconds 80/tcp nginx-5CMD ENTRYPOINT 综合使用实践–相当于组合拼接 #修改Dockerfile文件内容 # 在上一个Dockerfile文件内容基础上修改末尾的ENTRYPOINT :~/docker/images/nginx$ vim Dockerfile ENTRYPOINT [/usr/sbin/nginx] CMD [-g]#构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-5$ docker build -t ubuntu-nginx:v5.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-5$ docker run -itd --name unginx-6 ubuntu-nginx:v5.0 #查看效果 chengpengchengpeng:~/docker-file/dockerfile/nginx-5$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b0a7e6b32642 ubuntu-nginx:v5.0 /usr/sbin/nginx -g 28 seconds ago Exited (1) 27 seconds ago unginx-6---由于没有写全命令所以启动不起来 #根据镜像创建容器,创建时候不添加执行命令覆盖cmd的参数 -g daemon off; chengpengchengpeng:~/docker-file/dockerfile/nginx-5$ docker run -itd --name unginx-7 ubuntu-nginx:v5.0 -g daemon off; #查看效果 chengpengchengpeng:~/docker-file/dockerfile/nginx-5$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f13303834e49 ubuntu-nginx:v5.0 /usr/sbin/nginx -g … 3 seconds ago Up 2 seconds 80/tcp unginx-7 #注释 #任何docker run设置的命令参数或者CMD指令的命令都将作为ENTRYPOINT 指令的命令参数追加到 ENTRYPOINT指令之后3.1.5 文件编辑指令详解 ADD #ADD #格式 ADD src... dest ADD [src,... dest]#解释 #将指定的src 文件复制到容器文件系统中的dest #src 指的是宿主机dest 指的是容器 #所有拷贝到container 中的文件和文件夹权限为0755,uid 和gid 为0 #如果文件是可识别的压缩格式则docker 会帮忙解压缩---tar可以zip不可以 #注意 #1、如果源路径是个文件且目标路径是以/ 结尾 则docker 会把目标路径当作一个目录会把源文件拷贝到该目录下; #如果目标路径不存在则会自动创建目标路径。 #2、如果源路径是个文件且目标路径不是以/ 结尾则docker 会把目标路径当作一个文件。 #如果目标路径不存在会以目标路径为名创建一个文件内容同源文件 #如果目标文件是个存在的文件会用源文件覆盖它当然只是内容覆盖文件名还是目标文件名。 #如果目标文件实际是个存在的目录则会源文件拷贝到该目录下。注意这种情况下最好显示的以/ 结尾以避免混淆。 #3、如果源路径是个目录且目标路径不存在则docker 会自动以目标路径创建一个目录把源路径目录下的文件拷贝进来。 #如果目标路径是个已经存在的目录则docker 会把源路径目录下的文件拷贝到该目录下。 #4、如果源文件是个压缩文件则docker 会自动帮解压到指定的容器目录中。#ADD实践 #拷贝普通文件 :~/docker/images/nginx$ vim Dockerfile #Dockerfile文件内容 # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu:16.04 # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [sources.list,/etc/apt/sources.list] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y # 对外端口 EXPOSE 80chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ cp /etc/apt/sources.list ./ #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ docker build -t ubuntu-nginx:v6.0 . #根据镜像创建容器,创建时候不添加执行命令进入容器查看效果 chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ docker run -it --name unginx-8 ubuntu-nginx:v6.0--就进入了 #拷贝压缩文件 tar zcvf this.tar.gz ./* chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ ls Dockerfile sources.list this.tar.gz #编辑Dockerfile文件内容 ... # 执行命令 ... # 增加文件 # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu:16.04 # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [this.tar.gz,/nihao/] #ADD [sources.list,/etc/apt/sources.list] #RUN apt-get clean #RUN apt-get update #RUN apt-get install nginx -y # 对外端口 EXPOSE 80... #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ docker build -t ubuntu-nginx:v6.0 . #根据镜像创建容器,创建时候不添加执行命令进入容器查看效果 chengpengchengpeng:~/docker-file/dockerfile/nginx-6$ docker run -it --name unginx-9 ubuntu-nginx:v6.0 rootd19bd1f56270:/# ls bin boot dev etc home lib lib64 media mnt nihao opt proc root run sbin srv sys tmp usr var rootd19bd1f56270:/# cd nihao/ rootd19bd1f56270:/nihao# ls Dockerfile sources.listCOPY #COPY #格式 COPY src... dest COPY [src,... dest] #解释 #COPY 指令和ADD 指令功能和使用方式类似。只是COPY 指令不会做自动解压工作。 #单纯复制文件场景Docker 推荐使用COPY#COPY实践 #修改Dockerfile文件内容: # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [sources.list,/etc/apt/sources.list] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y COPY [index.html,/var/www/html/]---不清楚为什么index目录是在这里 # 对外端口 EXPOSE 80 #运行时默认命令 ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;] index.html 文件内容 h1hello world /h1 h1hello docker /h1 h1hello nginx/h1 #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-7$ docker build -t ubuntu-nginx:v7.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-7$ docker run -itd --name unginx-10 ubuntu-nginx:v7.0 #查看nginx-10信息 chengpengchengpeng: docker inspect unginx-10 #浏览器访问nginx查看效果VOLUME #VOLUME #格式 VOLUME [/data] #解释 #VOLUME 指令可以在镜像中创建挂载点这样只要通过该镜像创建的容器都有了挂载点 #通过VOLUME 指令创建的挂载点无法指定主机上对应的目录是自动生成的。 #举例 VOLUME [/var/lib/tomcat7/webapps/]VOLUME实践–用它创建的镜像可以用其他容器挂载 #VOLUME实践 #修改Dockerfile文件内容 #将COPY替换成为VOLUME chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ vim Dockerfile # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu:16.04 # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [sources.list,/etc/apt/sources.list] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y # 对外端口 EXPOSE 80VOLUME [/helloworld/] #运行时默认命令 ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;]... #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker build -t ubuntu-nginx:v8.0 . #创建数据卷容器 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker run -itd --name unginx-11 ubuntu-nginx:v8.0 #查看镜像信息 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker inspect unginx-11 Volumes: {/helloworld/: {}},#验证操作 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker run -itd --name v-1 --volumes-from unginx-11 nginx chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker run -itd --name v-2 --volumes-from unginx-11 nginx chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e47d4c74e2e9 nginx /docker-entrypoint.… 3 seconds ago Up 3 seconds 80/tcp v-2 6939a6610676 nginx /docker-entrypoint.… 10 seconds ago Up 9 seconds 80/tcp v-1 #进入容器1 itcastitcast:~/docker-file/dockerfile/nginx-8$ docker exec -it v-1 /bin/bash root6939a6610676:/# ls bin docker-entrypoint.d helloworld lib32 media proc sbin tmp boot docker-entrypoint.sh home lib64 mnt root srv usr dev etc lib libx32 opt run sys var root6939a6610676:/# cd helloworld/ root6939a6610676:/helloworld# ls root6939a6610676:/helloworld# ls helloworld root6939a6610676:/helloworld# rm helloworld/ rm: cannot remove helloworld/: Is a directory root6939a6610676:/helloworld# rm -rf helloworld/ root6939a6610676:/helloworld# ls root6939a6610676:/helloworld# #进入容器2 itcastitcast:~/docker-file/dockerfile/nginx-8$ docker exec -it v-2 /bin/bash roote47d4c74e2e9:/# ls bin docker-entrypoint.d helloworld lib32 media proc sbin tmp boot docker-entrypoint.sh home lib64 mnt root srv usr dev etc lib libx32 opt run sys var roote47d4c74e2e9:/# cd helloworld/ roote47d4c74e2e9:/helloworld# ls roote47d4c74e2e9:/helloworld# mkdir helloworld roote47d4c74e2e9:/helloworld# ls helloworld roote47d4c74e2e9:/helloworld# ls3.1.6 环境指令详解 ENV #ENV #格式 ENV key value 一次设置一个环节变量 ENV keyvalue ... 一次设置一个或多个环节变量 #解释 #设置环境变量可以在RUN 之前使用然后RUN 命令时调用容器启动时这些环境变量都会被指定ENV实践 #ENV实践 #命令行创建ENV的容器 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker run -e NIHAOhelloworld -itd --name ubuntu-111 ubuntu /bin/bash chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e68dba85564d ubuntu /bin/bash 7 seconds ago Up 6 seconds ubuntu-111#进入容器ubuntu-111 chengpengchengpeng:~/docker-file/dockerfile/nginx-8$ docker exec -it ubuntu-111 /bin/bash roote68dba85564d:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var roote68dba85564d:/# echo $NIHAO helloworld #修改Dockerfile文件内容 #在上一个Dockerfile 文件内容基础上在RUN 下面增加一个ENV ENV NIHAOhelloworld ... #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-9$ docker build -t ubuntu-nginx:v9.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-9$ docker run -itd --name unginx-12 ubuntu-nginx:v9.0 chengpengchengpeng:~/docker-file/dockerfile/nginx-9$ docker exec -it unginx-12 /bin/bash root6af995b1eda0:/# echo $NIHAO helloworld root6af995b1eda0:/# WORKDIR #WORKDIR #格式 WORKDIR /path/to/workdir (shell 模式) #解释 #切换目录为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。相当于cd #可以多次切换(相当于cd 命令) #也可以使用多个WORKDIR 指令后续命令如果参数是相对路径则会基于之前命令指定的路径。例如 #举例 WORKDIR /a WORKDIR b WORKDIR c RUN pwd #则最终路径为/a/b/cWORKDIR实践 #WORKDIR实践 #修改Dockerfile文件内容 # 在上一个Dockerfile 文件内容基础上在RUN 下面增加一个WORKDIR # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu:16.04 # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [sources.list,/etc/apt/sources.list] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -yWORKDIR /nihao/chengpeng/ RUN [touch,chengpeng1.txt] WORKDIR /nihao RUN [touch,chengpeng2.txt] WORKDIR chengpeng RUN [touch,chengpeng3.txt] # 对外端口 EXPOSE 80#运行时默认命令 ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;]... #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-10$ docker build -t ubuntu-nginx:v11.0 . #根据镜像创建容器,创建时候不添加执行命令 chengpengchengpeng:~/docker-file/dockerfile/nginx-10$ docker run -itd --name unginx-13 ubuntu-nginx:v11.0 #进入镜像 docker exec -it nginx-13 /bin/bash rootc6c06e640a87:/nihao/chengpeng# ls chengpeng1.txt chengpeng3.txt rootc6c06e640a87:/nihao/chengpeng# pwd /nihao/chengpeng rootc6c06e640a87:/nihao/chengpeng# cd .. rootc6c06e640a87:/nihao# ls chengpeng chengpeng2.txt rootc6c06e640a87:/nihao# cd .. rootc6c06e640a87:/# ls USER与ARG #USER #格式 USER daemon #解释 #指定运行容器时的用户名和UID后续的RUN 指令也会使用这里指定的用户。 #如果不输入任何信息表示默认使用root 用户 #ARG #格式 ARG name[default value] #解释 #ARG 指定了一个变量在docker build 的时候使用可以使用--build-arg varnamevalue来指定参数的值不过 #如果构建的时候不指定就会报错。3.1.7 触发器指令详解 触发器指令 ONBUILD #格式 ONBUILD [command] #解释 #当一个镜像A被作为其他镜像B的基础镜像时这个触发器才会被执行 #新镜像B在构建的时候会插入触发器中的指令。 #使用场景对于版本控制和方便传输适用于其他用户。触发器实践 #编辑Dockerfile :~/docker/images/nginx$ vim Dockerfile #内容如下 # 构建一个基于ubuntu的docker定制镜像 # 基础镜像 FROM ubuntu # 镜像作者 MAINTAINER panda kstwoak47163.com # 执行命令 ADD [sources.list,/etc/apt/sources.list] RUN apt-get clean RUN apt-get update RUN apt-get install nginx -y #触发器 ONBUILD COPY [index.html,/var/www/html/] # 对外端口 EXPOSE 80 #运行时默认命令 ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;] #构建镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ docker build -t ubuntu-nginx:v11.0 . #根据镜像创建容器, chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ docker run -itd --name unginx-14 ubuntu-nginx:v11.0 chengpengchengpeng:~/docker-file/dockerfile/nginx-11$$docker ps #查看镜像信息 chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ docker inspect ubuntu-nginx:v11.0 OnBuild: [COPY [\index.html\,\/var/www/html/\]], #访问容器页面是否被更改 chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ docker inspect unginx-14 //查看ip chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ curl 172.17.0.15(docker内部的ip) ---发现我修改的index.html并没有修改#构建子镜像Dockerfile文件 FROM ubuntu-nginx:v11.0 MAINTAINER panda kstwoak47163.com EXPOSE 80 ENTRYPOINT [/usr/sbin/nginx,-g,daemon off;] #构建子镜像 chengpengchengpeng:~/docker-file/dockerfile/nginx-12$ docker build -t ubuntu-nginx:v12.0 . #根据镜像创建容器, chengpengchengpeng:~/docker-file/dockerfile/nginx-12$ docker run -itd --name unginx-15 ubuntu-nginx:v12.0 #查看镜像信息 chengpengchengpeng:~/docker-file/dockerfile/nginx-12$ docker inspect ubuntu-nginx:v12.0 OnBuild: null, docker ps #访问容器页面是否被更改 #访问容器页面是否被更改 chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ docker inspect unginx-15 //查看ip chengpengchengpeng:~/docker-file/dockerfile/nginx-11$ curl 172.17.0.16(docker内部的ip) ---发现我修改的index.html修改了3.1.8 Dockerfile构建缓存 我们第一次构建很慢之后的构建都会很快因为他们用到了构建的缓存。 #取消缓存 docker build --no-cache -t [镜像名]:[镜像版本][Dockerfile位置]3.2 Dockerfile构建go环境 接下来我们就来做一个工作实践搭建一个go环境,然后尝试使用Dockerfile的方式构造一个镜像。 3.2.1 项目描述 beego官方网站https://beego.me/ 我们借助于beego的简介部署一个go项目然后运行起来。 3.2.2 手工部署go语言环境 需求 基于docker镜像手工部署go项目环境 方案分析 1、docker环境部署 2、go环境部署 3、go项目部署 4、测试 技术关键点 1、docker环境部署 使用docker镜像启动一个容器即可 2、go环境部署 go软件的依赖环境 go软件的基本环境配置 3、go项目部署 beego框架的下载 项目文件配置 启动go项目 4、测试 宿主机测试 解决方案 1、docker环境配置 1.1 获取docker镜像 1.2 启动docker容器 2、go环境部署 2.1 基础环境配置 2.2 go环境配置 3、go项目部署 3.1 获取beego代码 3.2 项目文件配置 3.3 项目启动 4、测试 4.1 宿主机测试 实施方案 #1、docker环境配置 #1.1 获取docker镜像 #获取一个ubuntu的模板文件 cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-nimi ubuntu-mini latest 44117582c84e 4 days ago 505MB #1.2 启动docker容器 #启动容器容器名称叫panda-go chengpengchengpeng:~$ docker run -itd --name panda-go ubuntu-mini /bin/bash #进入容器 docker exec -it go-test /bin/bash #2、go环境部署 #2.1 基础环境配置 #配置国内源 vim /etc/apt/sources.list--这一步不一定需要可以直接跳到sed #文件内容如下 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse #如果由于网络环境原因不能进行软件源更新可以使用如下内容 sudo sed -i s/cn.archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list #更新软件源安装基本软件 apt-get update apt-get install gcc libc6-dev git vim lrzsz -y #2.2 go环境配置 #安装go语言软件 //apt-get install golang -y--这一个暂时没成功--跳到将go1.10.linux-amd64.tar.gz拷贝到容器中进行解压包可以找我要QQ:921190764 由于软件源问题改使用新版本go 将go1.10.linux-amd64.tar.gz拷贝到容器中进行解压 tar -C /usr/local -zxf go1.10.linux-amd64.tar.gz #配置go基本环境变量 export GOROOT/usr/local/go export PATH$PATH:/usr/local/go/bin export GOPATH/root/go export PATH$GOPATH/bin/:$PATH #3、go项目部署 #3.1 获取beego代码 #下载项目beego mkdir /root/go/github.com go get github.com/astaxie/beego--这一步没有成功直接解压把 #暂时没有下载 Cloning into /root/go/src/github.com/astaxie/beego... fatal: unable to access https://github.com/astaxie/beego/: gnutls_handshake() failed: Error in the pull function. #然后把所需的压缩包astaxie.zip拖进来--可以找我要QQ921190764 #3.2 项目文件配置 #创建项目目录 mkdir /root/go/src/myTest cd /root/go/src/myTest #编辑go项目测试文件test.go package main import ( github.com/astaxie/beego ) type MainController struct { beego.Controller } func (this *MainController) Get() { this.Ctx.WriteString(hello world\n) } func main() { beego.Router(/, MainController{}) beego.Run() } #3.3 项目启动 #运行该文件 go run test.go #可以看到 #这个go项目运行起来后开放的端口是8080 #4、测试 #4.1宿主机测试 #查看容器的ip地址 docker inspect panda-go #浏览器查看效果 curl 172.17.0.2:8080--panda-go ip地址3.2.3 Dockerfile案例分析 环境分析 1、软件源文件使用国外源速度太慢所以我们可以自己使用国内的软件源。 因为我们在手工部署的时候使用的是官方(国外)的源所以为了部署快一点呢我使用国内的阿里云的源。 源内 容 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse由于阿里云的源出现问题所有更换为中科大的源 详情见3.1.1 2、软件安装涉及到了各种软件 3、涉及到了go的环境变量设置 4、软件运行涉及到了软件的运行目录 5、项目访问涉及到端口 关键点分析 1、增加文件使用 ADD 或者 COPY 指令 2、安装软件使用 RUN 指令 3、环境变量使用 ENV 指令 4、命令运行使用 WORKDIR 指令 5、项目端口使用 EXPOSE 指令 定制方案 1、基于ubuntu基础镜像进行操作 2、增加国内源文件 3、安装环境基本软件 4、定制命令工作目录 5、执行项目 6、开放端口 3.2.4 Dockerfile实践 创建目录 #创建目录 #进入标准目录 chengpengchengpeng:~/docker-file$ mkdir beego chengpengchengpeng:~/docker-file/beego$ Dockerfile内容 # 构建一个基于ubuntu 的docker 定制镜像 # 基础镜像 FROM ubuntu:16.04 # 镜像作者 MAINTAINER panda kstwoak47163.com # 增加国内源 #COPY sources.list /etc/apt/ RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list # 执行命令 RUN apt-get update RUN apt-get install gcc libc6-dev git lrzsz -y #将go复制解压到容器中 ADD go1.10.linux-amd64.tar.gz /usr/local/ # 定制环境变量 ENV GOROOT/usr/local/go ENV PATH$PATH:/usr/local/go/bin ENV GOPATH/root/go ENV PATH$GOPATH/bin/:$PATH # 下载项目 #RUN go get github.com/astaxie/beego--暂时下载不了 ADD astaxie.tar.xz /root/go/src/github.com/ # 增加文件 COPY test.go /root/go/src/myTest/ # 定制工作目录 WORKDIR /root/go/src/myTest/ # 对外端口 EXPOSE 8080 # 运行项目 ENTRYPOINT [go,run,test.go] #把sources.list和test.go文件放到这个目录中 #构建镜像 chengpengchengpeng:~/docker-file/beego$ docker build -t beego-test:v1.0 . chengpengchengpeng:~/docker-file/beego$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE beego-test v1.0 a202e1014dc8 47 seconds ago 708MB #运行镜像 chengpengchengpeng:~/docker-file/beego$ docker run -itd --name beego-1 beego-test:v1.0 chengpengchengpeng:~/docker-file/beego$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52937386f836 beego-test:v1.0 go run test.go 7 seconds ago Up 6 seconds 8080/tcp beego-1 #查看ip chengpengchengpeng:~/docker-file/beego$ docker inspect beego-1 #编辑go项目测试文件test.go package main import ( github.com/astaxie/beego ) type MainController struct { beego.Controller } func (this *MainController) Get() { this.Ctx.WriteString(hello world\n) } func main() { beego.Router(/, MainController{}) beego.Run() } #访问镜像查看效果3.3 Docker compose Docker compose是一种docker容器的任务编排工具 官方地址https://docs.docker.com/compose/ 3.3.1 compose简介 任务编排介绍 场景 我们在工作中为了完成业务目标首先把业务拆分成多个子任务然后对这些子任务进行顺序组合当子任务按照 方案执行完毕后就完成了业务目标。 任务编排就是对多个子任务执行顺序进行确定的过程。 常见的任务编排工具 单机版 docker compose 集群版 Docker swarm Docker Mesos Apache Kubernetesk8s Google docker compose是什么 译文 compose是定义和运行多容器Docker应用程序的工具。通过编写您可以使用YAML文件来配置应用程序 的服务。然后使用单个命令创建并启动配置中的所有服务。要了解更多有关组合的所有特性请参见特性列表。 docker compose的特点 本质docker 工具 对象应用服务 配置YAML 格式配置文件 命令简单 执行定义和运行容器 docker compose的配置文件 docker-compose.yml 文件后缀是yml 文件内容遵循 ymal格式 docker 和 Docker compose 官方地址https://docs.docker.com/compose/overview/ 3.3.2 compose 快速入门 docker compose 安装 #安装依赖工具 sudo apt-get install python-pip -y #安装编排工具 sudo pip install docker-compose #查看编排工具版本 sudo docker-compose version #查看命令帮助 docker-compose --helpPIP 源问题 #用pip安装依赖包时默认访问https://pypi.python.org/simple/ #但是经常出现不稳定以及访问速度非常慢的情况国内厂商提供的pipy镜像目前可用的有#在当前用户目录下创建.pip文件夹 mkdir ~/.pip #然后在该目录下创建pip.conf文件填写 [global] trusted-hostmirrors.aliyun.com index-urlhttp://mirrors.aliyun.com/pypi/simple/compose简单配置文件 #创建compose文件夹 :~$ mkdir -p ./docker/compose #进入到文件夹 :~$ cd ./docker/compose #创建yml文件 :~$ vim docker-compose.ymldocker-compose.yml 文件内容 version: 2 services:web1:image: nginxports:- 9999:80container_name: nginx-web1web2:image: nginxports:- 8888:80container_name: nginx-web2运行一个容器 #后台启动 docker-compose up -d #注意 #如果不加-d那么界面就会卡在前台 #查看运行效果 docker-compose ps3.3.3 compose命令详解 注意 所有命令尽量都在docker compose项目目录下面进行操作 项目目录docker-compose.yml所在目录 compose服务启动、关闭、查看 #后台启动 docker-compose up -d chengpengchengpeng:~/docker-file/compose$ docker-compose up -d Creating network compose_default with the default driver Creating nginx-web1 ... done Creating nginx-web2 ... done chengpengchengpeng:~/docker-file/compose$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 151957dd4eaa nginx /docker-entrypoint.… 2 minutes ago Up 2 minutes 0.0.0.0:9999-80/tcp, :::9999-80/tcp nginx-web1 6d8cbd26f77d nginx /docker-entrypoint.… 2 minutes ago Up 2 minutes 0.0.0.0:8888-80/tcp, :::8888-80/tcp nginx-web2 #删除服务 docker-compose down chengpengchengpeng:~/docker-file/compose$ docker-compose down Stopping nginx-web1 ... done Stopping nginx-web2 ... done Removing nginx-web1 ... done Removing nginx-web2 ... done Removing network compose_default #查看正在运行的服务 docker-compose ps chengpengchengpeng:~/docker-file/compose$ docker-compose psName Command State Ports ------------------------------------------------------------------------------------------ nginx-web1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:9999-80/tcp,:::9999-80/tcp nginx-web2 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8888-80/tcp,:::8888-80/tcp容器开启、关闭、删除 #启动一个服务 docker-compose start 服务名---docker-compose start web1 #注意 #如果后面不加服务名会停止所有的服务 #停止一个服务 docker-compose stop 服务名---docker-compose stop web1 #注意 #如果后面不加服务名会停止所有的服务 #删除服务 docker-compose rm #注意 #这个docker-compose rm不会删除应用的网络和数据卷。工作中尽量不要用rm进行删除其他信息查看 #查看运行的服务 docker-compose ps #查看服务运行的日志 docker-compose logs -f #注意 #加上-f 选项可以持续跟踪服务产生的日志 #查看服务依赖的镜像 docke-compose images chengpengchengpeng:~/docker-file/compose$ docker-compose images Container Repository Tag Image Id Size ---------------------------------------------------------- nginx-web1 nginx latest 593aee2afb64 186.8 MB nginx-web2 nginx latest 593aee2afb64 186.8 MB#进入服务容器 docker-compose exec 服务名 执行命令 docker-compose exec web1 /bin/bash #查看服务网络 docker network ls3.3.4 compose文件详解 官方参考资料 https://docs.docker.com/compose/overview/ 文件命名 后缀是 .yml **YMAL介绍 YMAL文件格式 compose文件样例 格式详解 compose版本号、服务标识符必须顶格写 属性名和属性值是以: (冒号空格) 隔开 层级使用 (两个空格)表示 服务属性使用 - (空格空格-空格)来表示compose属性介绍 #镜像 格式 image: 镜像名称:版本号 举例 image: nginx:latest #容器命名 格式 container_name: 自定义容器命名 举例 container_name: nginx-web1 #数据卷 格式 volumes: - 宿主机文件:容器文件 举例 volumes: - ./linshi.conf:/nihao/haha.sh #端口 格式 ports: - 宿主机端口:容器端口 举例 ports: - 9999:80 #镜像构建 格式 build: Dockerfile 的路径 举例 build: . build: ./dockerfile_dir/ build: /root/dockerfile_dir/ #镜像依赖 格式 depends_on: - 本镜像依赖于哪个服务 举例 depends_on: - web13.3.5 go项目实践 项目分析 需求 自动部署一个集群使用nginx代理两个go项目----负载均衡 流程分析 1、go项目部署 2、nginx代理部署 3、docker 环境 4、docker compose任务编排 技术点分析 1、go项目部署 go项目基础环境 go项目配置 2、nginx代理部署 nginx的配置文件 3、docker 环境 docker基础镜像 go镜像 nginx镜像 4、docker compose任务编排 4个任务1个镜像构建任务、2个go任务、1个nginx任务 任务依赖关系go任务执行依赖于nginx任务 镜像依赖go镜像依赖于nginx镜像完毕 实施方案 1、基础环境 1.1 compose基础目录 1.2 环境依赖文件 sources.list、test.go、test1.go、test2.go、nginx-beego.conf 1.3 dockerfile文件 go项目环境的Dockerfile文件 2、任务编排文件 2.1 nginx任务 基于nginx镜像增加一个nginx的代理配置即可 2.2 go基础镜像任务 基于ubuntu镜像构建go基础环境镜像参考3.2.4内容 该任务依赖于2.1 nginx任务 2.3 go项目任务 基于go基础镜像增加测试文件即可 该任务依赖于2.2 go基础镜像任务 3、测试 3.1 集群测试 方案实施 1、基础环境 1.1 compose基础目录 创建compose基础目录 1.2 环境依赖文件 nginx配置文件 创建nginx专用目录 :~$ mkdir nginx :~$ cd nginx 创建nginx负载均衡配置nginx-beego.conf :~$ vim nginx-beego.conf文件内容 upstream beegos { #upstream模块server 192.168.8.14:10086;server 192.168.8.14:10087; } server {listen 80;#提供服务的端口server_name _;#服务名称location / {proxy_pass http://beegos;#反选代理 upstream模块 beegosindex index.html index.htm;#默认首页} }go基础镜像依赖文件 #创建go基础镜像目录 :~$ mkdir go-base :~$ cd go-base #创建source.lise :~$ vim sources.list文件内容 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse或者 RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.listtest.go配置文件 package main import ( github.com/astaxie/beego ) type MainController struct { beego.Controller } func (this *MainController) Get(){ this.Ctx.WriteString(hello world\n) } func main() { beego.Router(/, MainController{}) beego.Run() }go任务依赖文件 beego1/test.go配置文件 package main import ( github.com/astaxie/beego ) type MainController struct { beego.Controller } func (this *MainController) Get(){ this.Ctx.WriteString(h1hello beego1/h1\n) } func main() { beego.Router(/, MainController{}) beego.Run() }Beego2/test.go配置文件 package main import ( github.com/astaxie/beego ) type MainController struct { beego.Controller } func (this *MainController) Get(){ this.Ctx.WriteString(h1hello beego2/h1\n) } func main() { beego.Router(/, MainController{}) beego.Run() }1.3 dockerfile文件 go项目环境的Dockerfile文件 创建Dockerfile文件 :~$ vim dockerfile文件内容 # 构建一个基于ubuntu 的docker 定制镜像 # 基础镜像 FROM ubuntu # 镜像作者 MAINTAINER panda kstwoak47163.com # 增加国内源 #COPY sources.list /etc/apt/ RUN sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list RUN sed -i s/security.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list # 执行命令 RUN apt-get update RUN apt-get install gcc libc6-dev git lrzsz -y #将go复制解压到容器中 ADD go1.10.linux-amd64.tar.gz /usr/local/ # 定制环境变量 ENV GOROOT/usr/local/go ENV PATH$PATH:/usr/local/go/bin ENV GOPATH/root/go ENV PATH$GOPATH/bin/:$PATH # 下载项目 #RUN go get github.com/astaxie/beego ADD astaxie.tar.xz /root/go/src/github.com # 增加文件 COPY test.go /root/go/src/myTest/ # 定制工作目录 WORKDIR /root/go/src/myTest/ # 对外端口 EXPOSE 8080 # 运行项目 ENTRYPOINT [go,run,test.go]最终的文件目录结构 :~# tree /docker/compose/ /docker/compose/beego/ ├── beego1 │ └── test.go ├── beego2 │ └── test.go ├── docker-compose.yml ├── beego │ ├── astaxie.tar.xz │ ├── Dockerfile │ ├── go1.10.linux-amd64.tar.gz │ └── test.go └── nginx └── nginx-beego.conf2、任务编排文件 docker-compose.yml文件内容 version: 2 services:web1:image: nginxports:- 39999:80volumes:- ./nginx/beego-nginx.conf:/etc/nginx/conf.d/default.confcontainer_name: nginx-web1go-base:---可以改build: ./beego/image: go-base:v0.1beego-web1:image: go-base:v0.1volumes:- ./beego-1/test1.go:/root/go/src/myTest/test.goports:- 10086:8080container_name: beego-web1depends_on:- go-basebeego-web2:image: go-base:v0.1volumes:- ./beego-2/test2.go:/root/go/src/myTest/test.goports:- 10087:8080container_name: beego-web2depends_on:- go-base 3、 最后测试 #构建镜像 $docker-compose build #启动任务 $docker-compose up -d #查看效果 $docker-compose ps #浏览器访问 192.168.110.5:39999
http://www.zqtcl.cn/news/452372/

相关文章:

  • 做网站前新闻录入网站模板
  • 网站域名做跳转要收费吗科技信息期刊
  • 登别的网站应怎么做网站推广广告词大全集
  • 漯河城乡建设管理局网站wordpress icon class
  • 买空间哪个网站好广州多少网络科技有限公司
  • 网站的网络推广方案营销型网站建设论文
  • 苏州做网站便宜的公司哪家好门店管理系统app
  • 学校多语言网站建设网络维护网站建设培训
  • Wordpress外贸网站搭建公司建站系统的应用场景
  • 网站推广网络推广方wordpress汉语公益
  • 长沙做网站的公司有哪些宁波奉化建设局网站
  • 温岭专业自适应网站建设承德招聘信息网
  • 做公司网站的模板下载wordpress e
  • 网站建设基本知识wordpress 没有小工具
  • 北京完美建设有限公司网站酒店加盟
  • 山东网络推广网站德州市建设局质监站网站
  • api模式网站开发网站打开后显示建设中
  • 排名好的郑州网站建设免费营销培训
  • 美橙互联网站网站主要应用
  • 淘宝客网站做appuv推广平台
  • 网站公司可以做英文网吗图片加字制作免费
  • 海口个人建站模板精品课程云网站建设
  • 阿里网站空间莱芜新闻视频回放
  • 高清网站建设的好处wordpress 房产模板
  • 在建工程查询网站怎么自己开发网站
  • 旧电脑怎么做网站如何自己弄个免费网站
  • 聊城网站营销WordPress工作发布
  • 建造网站需要什么汽车网站建设
  • 网站建设app郑州发布评论
  • 福州网站制作建设网页设计图片是怎么显示的