使用Dockerfile将程序打包成镜像,做到一次编译、到处运行。
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
类似于Linux的脚本–.shell windows的脚本文件–.bat等等
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
这里我们根据tomcat来定制镜像:
首先使用Docker pull一个tomcat
root@ubuntu:/# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
Digest: sha256:68355b27adee5fc76c23e3d3cb994bd2733f05aa8e2c070a61346e16eed308ac
Status: Image is up to date for tomcat:latest
docker.io/library/tomcat:latest
root@ubuntu:/#
然后我们查看一下是否pull到了tomcat。
这里用到了两个命令:docker images和docker image ls这两个命令都可以查看,我们看到了下方有
这么一个tomcat
root@ubuntu:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 c6a43cd4801e 9 days ago 123MB
ubuntu 18.04 549b9b86cb8d 9 days ago 64.2MB
tomcat latest 6fa48e047721 2 weeks ago 507MB
root@ubuntu:/# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 c6a43cd4801e 9 days ago 123MB
ubuntu 18.04 549b9b86cb8d 9 days ago 64.2MB
tomcat latest 6fa48e047721 2 weeks ago 507MB
root@ubuntu:/#
创建一个新的容器并运行一个命令 :
docker run -it tomcat bash
查看一下目录这里不能使用ll 要使用ls -al
root@ubuntu:/# docker run -it tomcat bash
root@10ffed32e707:/usr/local/tomcat# ll
bash: ll: command not found
root@10ffed32e707:/usr/local/tomcat# ls -al
total 160
drwxr-sr-x 1 root staff 4096 Dec 13 23:52 .
drwxrwsr-x 1 root staff 4096 Nov 23 16:34 ..
-rw-r--r-- 1 root root 19318 Dec 7 19:23 BUILDING.txt
-rw-r--r-- 1 root root 5408 Dec 7 19:23 CONTRIBUTING.md
-rw-r--r-- 1 root root 57011 Dec 7 19:23 LICENSE
-rw-r--r-- 1 root root 1726 Dec 7 19:23 NOTICE
-rw-r--r-- 1 root root 3255 Dec 7 19:23 README.md
-rw-r--r-- 1 root root 7136 Dec 7 19:23 RELEASE-NOTES
-rw-r--r-- 1 root root 16262 Dec 7 19:23 RUNNING.txt
drwxr-xr-x 2 root root 4096 Dec 13 23:52 bin
drwxr-sr-x 2 root root 4096 Dec 7 19:23 conf
drwxr-sr-x 2 root staff 4096 Dec 13 23:52 include
drwxr-xr-x 2 root root 4096 Dec 13 23:52 lib
drwxrwxrwx 2 root root 4096 Dec 7 19:19 logs
drwxr-sr-x 3 root staff 4096 Dec 13 23:52 native-jni-lib
drwxrwxrwx 2 root root 4096 Dec 13 23:52 temp
drwxr-xr-x 7 root root 4096 Dec 7 19:21 webapps
drwxrwxrwx 2 root root 4096 Dec 7 19:19 work
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile:
这里我们使用tomcat举例,进入到Linux的usr/local/docker目录下新建tomcat目录并在目录中新建Dockerfile文件
root@ubuntu:/usr/local/docker/tomcat# ll
total 12
drwxr-xr-x 2 root root 4096 Jan 3 02:57 ./
drwxr-xr-x 3 root root 4096 Jan 3 02:55 ../
-rw-r--r-- 1 root root 80 Jan 3 02:57 Dockerfile
root@ubuntu:/usr/local/docker/tomcat#
在这个文件里写入以下代码:
root@ubuntu:/usr/local/docker/tomcat# vi Dockerfile
FROM tomcat
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html
构建镜像
此命令是用来构建镜像的,后面的名字是标签名 可以任意取 后面的点`在这里插入代码片`是代表当前目录的意思 因为镜像的构建需要基于Dockerfile文件,这个点的意思就是要告知Dockerfile文件在哪
docker build -t myshop .
查看一下仓库
root@ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myshop latest abaff971fdb3 3 hours ago 507MB
tomcat latest 94e31e5297d1 4 days ago 507MB
ubuntu latest 549b9b86cb8d 2 weeks ago 64.2MB
以交互的方式进入新建好的myshop
root@ubuntu:~# docker run -it myshop bash
进入到相应的目录可以看我们新建的index.html是存在的并且显示了内容
root@00b45314327c:/usr/local/tomcat# cd webapps
root@00b45314327c:/usr/local/tomcat/webapps# ls -al
total 28
drwxr-xr-x 1 root root 4096 Dec 7 19:21 .
drwxr-sr-x 1 root staff 4096 Dec 29 09:22 ..
drwxr-xr-x 1 root root 4096 Jan 3 03:11 ROOT
drwxr-xr-x 15 root root 4096 Dec 29 09:21 docs
drwxr-xr-x 6 root root 4096 Dec 29 09:21 examples
drwxr-xr-x 5 root root 4096 Dec 29 09:21 host-manager
drwxr-xr-x 5 root root 4096 Dec 29 09:21 manager
root@00b45314327c:/usr/local/tomcat/webapps# cd ROOT
root@00b45314327c:/usr/local/tomcat/webapps/ROOT# ls -al
total 196
drwxr-xr-x 1 root root 4096 Jan 3 03:11 .
drwxr-xr-x 1 root root 4096 Dec 7 19:21 ..
-rw-r--r-- 1 root root 7136 Dec 7 19:23 RELEASE-NOTES.txt
drwxr-xr-x 2 root root 4096 Dec 29 09:21 WEB-INF
-rw-r--r-- 1 root root 27235 Dec 7 19:23 asf-logo-wide.svg
-rw-r--r-- 1 root root 713 Dec 7 19:21 bg-button.png
-rw-r--r-- 1 root root 1918 Dec 7 19:21 bg-middle.png
-rw-r--r-- 1 root root 1401 Dec 7 19:21 bg-nav.png
-rw-r--r-- 1 root root 3103 Dec 7 19:21 bg-upper.png
-rw-r--r-- 1 root root 21630 Dec 7 19:21 favicon.ico
-rw-r--r-- 1 root root 13 Jan 3 03:11 index.html
-rw-r--r-- 1 root root 12219 Dec 7 19:23 index.jsp
-rw-r--r-- 1 root root 2376 Dec 7 19:21 tomcat-power.gif
-rw-r--r-- 1 root root 5581 Dec 7 19:23 tomcat.css
-rw-r--r-- 1 root root 2066 Dec 7 19:21 tomcat.gif
-rw-r--r-- 1 root root 5103 Dec 7 19:21 tomcat.png
-rw-r--r-- 1 root root 67795 Dec 7 19:23 tomcat.svg
root@00b45314327c:/usr/local/tomcat/webapps/ROOT# cat index.html
Hello Docker
假如我们需要删除ROOT目录下面的东西,我们就需要在Dockerfile中新增一下代码
FROM tomcat
这是新加入的代码
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -rf *
新加入的代码到此结束
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html
继续运行一下代码
docker run -it --rm myshop bash
使用 docker images查看一下 有两个虚悬镜像 将他们删除,docker ps -a 查看运行的镜像,docker rm 加对应的id删除他们
使用 docker image prune就可以删除虚悬镜像
运行命令启动
docker run -p 8080:8080 myshop
打开服务器输入自己的IP地址加端口号 发现成功访问Hello Docker
以上来源查看自李哥本人纯属小白 ,建议从上述链接查看,此处笔记为了练习用