Dockerfile


Dockerfile

mkdir docker-test-volume && cd docker-test-volume
vim dockerfile
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----------end------------"
CMD /bin/bash
# build自己的镜像
docker build -f dockerfile -t shenhao/centos:1.0 .
-f :file文件
-t :增加名字的tag

容器间互联,同一个数据卷:

docker run -it --name docker02 --volumes-from docker01 shenhao/centos:1.0
# 测试,可以删除docker01,查看一下docker02和docker03是否还可以访问这个文件
# 测试依旧可以访问,因为映射到宿主机同一个位置

DockerFile的指令

FROM         # 基础镜像
MAINTAINER     # 镜像是谁写的,姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤:tomcat镜像
WORKDIE         # 镜像的工作目录
VOLUME         # 挂载的目录
EXPOSE         # 保留的端口配置,暴露容器内的端口
CMD          # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT     # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD      # 当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。
COPY         # 类似ADD,将我们文件拷贝到镜像
ENV          # 构建的时候设置环境变量!
1. 实战:构建自己的centos
# 1.编写DockerFile的文件
vim mydockerfile-centos

FROM centos
MAINTAINER shenhao<56550322@163.com>

ENV MYPATH /user/local #键值对的形式
WORKDIR $MYPATH

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

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# 2.通过mydockerfile这个文件构建镜像,镜像名为mycentos
docker build -f mydockerfile-centos -t mycentos:2.0 .
2. 查看并运行自己build的镜像
2.1 查看镜像
docker images

image-20200923171635842

2.2 运行镜像
#运行镜像,形成容器
docker run -it --name complete_centos mycentos:2.0 /bin/bash
#查看容器
docker ps

image-20200923215347952

2.3 执行新的命令

image-20200923215635142

列出镜像变更的历史

  • 通过docker history [镜像名:tag] 或者docker history 镜像ID

image-20200923215856846

3. CMD和ENTRYPOINT的区别
#编写dockerfile文件
FROM centos
CMD ["ls","-a"]

image-20200923220821564

#构建镜像
docker build -f docker-cmd-test -t cmd-ls:2.0 .
#运行镜像
docker run -it --name cmd cmd-ls:2.0

image-20200923221257872

image-20200923221424647

docker运行的替代指令必须是完整的指令<必须在run的时候写出完整的shell命令>

image-20200923222258930

测试ENTRYPOINT<可以在run的时候直接-a>

image-20200923223038230

image-20200923223613690

image-20200923223527647

实战:Tomcat镜像

FROM centos
MAINTAINER shenhao<56550322@163.com>

COPY readme.txt /usr/local/readme.txt #将宿主机上的readme.txt文件copy到容器内的/usr/local/readme.txt

# 增加层数
ADD jdk.tar.gz /usr/local  #ADD命令会自动解压
ADD apache-tomcat.tar.gz /usr/local

RUN yum -y install vim

# 配置环境变量
ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 8080

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

注意:如果dockefile的文件名是Dockerfile,可以在docker build时不需要-f参数

发布镜像

  • 通过dockerhub上传镜像

image-20200924002648584

image-20200924004034598

在上传的时候必须要重新tag命名!!!

image-20200924004216020

  • 通过阿里云上传镜像

image-20200924004539333

image-20200924004626226

image-20200924004655267

1. 登录阿里云Docker Registry

$ sudo docker login --username=tyj_ecust registry.cn-shanghai.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ sudo docker pull registry.cn-shanghai.aliyuncs.com/shenhao-stu-test/shenhao-test:[镜像版本号]

3. 将镜像推送到Registry

sudo docker login --username=tyj_ecust registry.cn-shanghai.aliyuncs.com
sudo docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/shenhao-stu-test/shenhao-test:[镜像版本号]
sudo docker push registry.cn-shanghai.aliyuncs.com/shenhao-stu-test/shenhao-test:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-shanghai.aliyuncs.com 作为Registry的域名登录。

5. 示例

使用”docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。使用 “docker push” 命令将该镜像推送至远程。

$ sudo docker push registry.cn-shanghai.aliyuncs.com/shenhao-stu-test/shenhao-test:1.0

image-20200924005537136

6. 查看

image-20200924140501463


文章作者: Shen Hao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Shen Hao !
评论
评论
  目录