欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Dockerfile制作Docker镜像

程序员文章站 2022-06-03 12:06:05
...

 

最近项目中使用到Docker,因此趁在周末时间,研究下Docker。Docker环境安装之前已经安装就绪,请参考:《在Centos中安装Docker CE》。我们从简单的开始,使用Dockerfile制作一个能运行Java应用程序的Docker镜像 
1、准备JDK和Tomcat,将JDK和Tomcat放到/usr/local/soft目录下,soft目录是我自己新增的 
使用Dockerfile制作Docker镜像
2、在/usr/local/soft目录下创建Dockerfile文件,文件内容如下

#VERSION 0.0.1

#base image
FROM ubuntu:latest
MAINTAINER longwentao “aaa@qq.com”

#install jdk and tomcat
ADD jdk-7u79-macosx-x64.dmg /usr/local/
ADD apache-tomcat-7.0.72 /usr/local/apache-tomcat-7.0.72

ADD onStart.sh /usr/local/

ENV JAVA_HOME=/usr/local/jdk1.7.0_79 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin
RUN echo "JAVA_HOME=/usr/local/jdk1.7.0_79.jdk CALSSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nPATH=$PATH:$JAVA_HOME/bin" >> /etc/profile

#add execute privilege
RUN chmod +x /usr/local/onStart.sh

EXPOSE 8888

#start tomcat
ENTRYPOINT /usr/local/onStart.sh

TIPS: 
1) FROM 表示基于哪个基础镜像制作镜像,这里是基于ubuntu的最新镜像 
2) MAINTAINER 表示由哪个维护这个镜像 
3) ADD 表示将宿主机上的文件复制到镜像的指定目录,这里是将jdk和tomcat复制到镜像的/usr/local目录下;onStart.sh是另一个文件,在ENTRYPOINT中会指定需要运行什么样的命令,因此将这些命令统一放在onStart.sh文件中 
4) 因此onStart.sh是新增文件,因此还需要给它添加可执行权限,不然会报权限错误 
5) ENV 表示指定环境变量 
6) RUN 运行指定的命令,这里用于配置Java环境变量 
7) EXPOSE 8888 指定暴露8888端口 
8) ENTRYPOINT 进入点,后面跟的是需要执行的脚本

3、在/usr/local/soft目录下创建onStart.sh文件,文件内容如下

#!/bin/bash
/usr/local/apache-tomcat-7.0.72/bin/startup.sh
#tail -f /usr/local/apache-tomcat-7.0.72/logs/onSart.log

4、进入到/usr/local/soft目录下,使用docker build 制作Docker镜像

docker build -t="tomcat-ubuntu:v1.0" .

TIPS: 
1) -t=”tomcat-ubuntu:v1.0” 指定镜像名称为tomcat-ubuntu,tag为v1.0 
2) 最后的一点(.)表示当前目录下的Dockerfile文件

5、最后通过docker images查看生成的镜像 
使用Dockerfile制作Docker镜像

6.当有镜像的时候,可以直接加载镜像,镜像文件一般是以.tar结尾的

#导入镜像:
docker load --input  test_acb_images.tar 
  
#查看镜像docker images
aaa@qq.com:~# docker images
REPOSITORY           TAG                   IMAGE ID            CREATED             SIZE
test_acb_images        v1.9        1583b5fd193f        2 hours ago         20.23 MB

7.运行容器

8.今天在启动镜像的时候报了一个错误。

docker: Error response from daemon: Conflict. The name "/interlock" is already in use by container d846b801a978c76979d46a839bb05c26d2ab949ff9f4f740b06b5e2564bae958. You have to remove (or rename) that container to reuse that name.

解决方法 删除之前的容器,即docker rm interlock 即可解决

参考:https://docs.docker.com/swarm/swarm_at_scale/deploy-infra/#task-3-add-the-load-balancer

重新再运行docker run 即可。

有用的命令

  • docker ps:列出所有正在运行的容器
  • docker ps  -a :显示所有的容器,包括未运行的(即停止的)。
  • docker image ls:列出所有的镜像
  • docker stop <name>:暂停容器
  • docker rm <name>:删除容器

Docker 删除镜像

本以为删除镜像会很简单,但是删除过程中并不是那么顺利。

 

1. 查询镜像

使用Dockerfile制作Docker镜像

 

现在想删除第一个,ID为 99f85991949f 的镜像。

使用Dockerfile制作Docker镜像

 

从上面看出,需要先停到ID为 67*** 的容器。

 

2. 查询容器

使用Dockerfile制作Docker镜像

 

3. 先删除容器

使用Dockerfile制作Docker镜像

 

上面可以看出,容器已经删除。

 

4. 删除镜像

使用Dockerfile制作Docker镜像

 

注意点:

1. 删除前需要保证容器是停止的  stop

2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID  ,其中 容器(rm)  和 镜像(rmi)

3. 顺序需要先删除容器

转载于:https://blog.csdn.net/kity9420/article/details/72853497

https://blog.csdn.net/winy_lm/article/details/77980529