镜像 commit
下载 tomcat 镜像并运行
docker run -it -p 8888:8080 tomcat
docker run -it -P tomcat //-P随机端口
容器数据卷
概念
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。
特点
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
添加
直接命令添加
添加数据卷(数据目录挂载)
//注意写法
docker run -di -v /宿主机绝对路径目录:/容器内目录 centos
docker run -it -v /myDataVolume:/dataVolumeContainer centos
查看数据是否挂载成功
查看容器内部详情
docker inspect id
DockerFile添加
1.根目录下新建mydocker文件夹并进入
cd /
mkdir mydocker
cd /mydocker
2.创建Dockerfile文件
可以使用VOLUME指令来给镜像添加一个或多个数据卷
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
3.build后生成镜像
docker build [选项] <上下文路径/URL/->
docker build -f /mydocker/Dockerfile1 -t chu/centos . // .是当前文件夹
参数说明
--tag,-t //Name and optionally a tag in the 'name:tag' format 标签
--file,-f //允许指定要使用替代文件的路径
4.run容器
docker run -it chu/centos /bin/bash
可以看到我们容器内已经有卷目录地址。
通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址?
docker inspect 容器id
DockerFile 解析
概念
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤
编写Dockerfile文件 -> docker build -> docker run
文件长什么样
以centos 为例 https://hub.docker.com/_/centos/
构建过程解析
DockerFile 内容基础知识
Docker执行Dockerfile的大致流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
DockerFile 保留字指令
案例
Base镜像(scratch)
Docker Hub中 99% 的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。
自定义镜像 mycentos
官方的centos中是精简版本的,没有安装ifconfig,vim。自定义镜像要求 登录后的默认路径,vim,ifconfig
自定义 tomcat9
FROM centos
MAINTAINER chu<chu@qq.com>
#把宿主机当前上下文的c.txt 拷贝到容器 /usr/local/ 路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
docker run -d -p 9080:8080 --name myt9 -v /mydocker/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /mydocker/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true chutomcat9
在外面执行容器里面
docker exec 容器id ls -l
Docker 常用安装
mysql
docker search mysql
docker pull mysql:5.6
docker run -p 12345:3306 --name mysql -v /mydocker/mysql/conf:/etc/mysql/conf.d -v /mydocker/mysql/logs:/logs -v /mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
进入容器操作
将镜像推送到Registry
$ docker login --username=21147****@qq.com registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/doaremon/mycentos:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/doaremon/mycentos:[镜像版本号]
删除本地镜像
docker rmi -f registry.cn-hangzhou.aliyuncs.com/doaremon/mycentos:1.1
https://segmentfault.com/a/1190000022274697
DockerFile
容器数据卷用 dockerFile 文件添加
vim Dockerfile
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
build后生成镜像
docker build -f /mydocker/Dockerfile -t zzyy/centos .
//创建容器
docker run -it zzyy/centos
可以看到这个容器中已经有目录了
退出容器 crtr p + Q
Docker file 文件解析
FROM centos
MAINTAINER chu<chu@qq.com>
ENV mypath /tmp
WORKDIR $mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo "success...."
CMD /bin/bash
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
创建容器
FROM centos
RUN yum install -y curl
CMD ['curl','-s','http://ip.cn']
docker build -f /mydocker/Dockerfile3 -t myip .
命令行叠加
cp Dockerfile3 Dockerfile4
FROM centos
RUN yum install -y curl
ENTRYPOINT ['curl','-s','http://ip.cn']
docker build -f /mydocker/Dockerfile4 -t myip2 .
docker run myip2
观看记录
https://www.bilibili.com/video/BV1Ls411n7mx?p=28&spm_id_from=pageDriver