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
2.2 运行镜像
#运行镜像,形成容器
docker run -it --name complete_centos mycentos:2.0 /bin/bash
#查看容器
docker ps
2.3 执行新的命令
列出镜像变更的历史
- 通过docker history [镜像名:tag] 或者docker history 镜像ID
3. CMD和ENTRYPOINT的区别
#编写dockerfile文件
FROM centos
CMD ["ls","-a"]
#构建镜像
docker build -f docker-cmd-test -t cmd-ls:2.0 .
#运行镜像
docker run -it --name cmd cmd-ls:2.0
docker运行的替代指令必须是完整的指令<必须在run的时候写出完整的shell命令>
测试ENTRYPOINT<可以在run的时候直接-a>
实战: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上传镜像
在上传的时候必须要重新tag命名!!!
- 通过阿里云上传镜像
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