作者 | 陌无崖
转载请联系授权
dockerfile是一个使用特定格式且有特定命令组成的构建容器的文件。
1、Dockerfile的命名具有唯一性,统一为Dockerfile,一般放在项目的根目录,方便构建成镜像文件。 2、Dockerfile中的内容为一系列特定的指令 3、Dockerfile中每一个指令都会创建一个镜像层。这些层是堆叠的,每一个层都是前一个层的增量。
FROM用于指定基础的镜像,语法为FROM <image>:<tag>
,tag表示版本,省略时默认是最新版本,如:
FROM Golang:1.12.3
LABEL可以为镜像添加自定义的标签,一个镜像可以包括一个或多个标签。因为每一条指令都会创建一个可读的层,为了避免太多层,我们经常合并成一个指令,如,
LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12"
RUN指令允许我们书写shell命令或者exec命令,且RUN指令创建的镜像层会被缓存。
# 创建一个文件夹
RUN mkdir /app
# 安装nginx
RUN apt-get install -y curl nginx
# 当然我们也可以进行合并
RUN mkdir /app && apt-get install -y curl nginx
copy为复制文件,语法为COPY <源路径>... <目标路径>
,如:
# 将当前目录复制到app路径下。" . "代表当前目录。
COPY . /app
# 将当前work目录复制到app路径下。
COPY ./work /app
除了上面的使用方法,我们也可以利用通配符匹配文件,然后再复制到相应的路径下:
COPY app-* /app
常用的通配符如下
'*' 匹配任意序列的非分隔符字符。
'?' 匹配任何一个非分隔符字符
ADD 和COPY类似,一般推荐使用COPY,ADD对tar的提取和远程URL的支持不友好,因此我们不推荐使用以下的命令
ADD http://example.com/big.tar.xz /usr/src/things/
我们应该尽可能的使用RUN指令,使用shell命令获取
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
CMD主要用于执行我们的镜像中的五年。格式为CMD ["executable", "param1", "param2"...]
如:
指定server这个文件
CMD ["./server"]
当需要暴露我们的端口时,可以使用这个命令。代表当前容器将要监听的端口
EXPOSE 8900
这个指令经常被使用到,我们可以用它声明我们的环境变量,使用如下
ENV GOPATH /root/go
当我们使用的时候就可以像再shell命令中那样简单使用
RUN go run $GOPATH/program/main.go
WORKDIR用于在容器内设置一个工作目录:通过WORKDIR设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。如,使用WORKDIR设置工作目录:
WORKDIR /app
USER 用于指定运行镜像所使用的用户
docker pull [imagename]
docker pull [imagename]:1.0.1//指定版本
由于默认的拉取仓库为国外仓库,无法访问外国网站,因此无法拉取 解决方法 将镜像源换成阿里云镜像 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
重启docker
实例化镜像即是运行一个镜像,即容器,容器为独立运行的一个或者一组应用以及他们所需要的运行环境 创建一个容器 docker create [选项] 镜像 运行的程序 -i 让容器的输入保持打开状态 -t 让docker分配一个伪终端 例如
docker create -it docker.io/mysql /bin/bash
-P 默认随机映射一个端口 -p 自定义端口
docker run -d -P httpd
docker run -d -p 12345:80 httpd
--link name:别名
# 创建一个源容器
docker run -d -P --name web1 httpd
# 创建接收容器
docker run -d -P --name web2 --link web1:web1 httpd
# 测试容器互联进入容器
docker exec -it web2 /bin/bash
# 安装 ping 命令
apt-get update && apt install iputils-ping
# 测试
ping web1
供容器使用的特殊目录,位于容器中,可以将宿主机的目录挂载到数据卷如:
# 创建名字为web的容器并且拥有两个数据卷目录
docker run -d -v /data1 -v /data2 --name web httpd:centos
# 创建一个名字为web-1的容器,并将主机的/var/www目录挂载到数据卷目录 /data1上
# 实现宿主机与容器之间数据的迁移
docker run -d -v /var/www:/data1 --name web-1 mysql:5.6
在容器之间共享一些数据 例如:
# 在web03容器中的data1目录中的数据会共享到web容器中的data1目录
docker run -it --volumes-from web --name web03 httpd:centos
关注我试试回复以下关键词
go 微服务 ppt
大数据 书籍 资料
END