#https://www.bilibili.com/video/BV1og4y1q7M4?p=28&spm_id_from=pageDriver 狂神视频
dcoekr 是用来构建docker 的镜像文件,命令参数脚本
编写一个dockerfile 文件
docker build 构建镜像
docker run 运行这个镜像。
docker push 发布镜像(dockerhub,阿里云镜像仓库)
官方,centos的地址
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]官方镜像只有基础包。需要自己去搭建自己的镜像。
docker 基础知识,
每个关键字指令,必须是大大写字母,
执行从上到下,顺序执行
#表示注释
每个指令,都会创建提交一下新的镜像层,bingtij
docker file 是通常面向开发的,发布项目,做镜像,就需要编写dockerfile 文件,这个文件十分简单。
docker 镜像逐渐成为了,企业交付的标准。
步骤开发生成镜像。
dockerfile构建文件定义了一切步骤,源代码
dockerimages通过dockerfile构建生成的镜像,最终发布和运行的产品,
docker 容器,容器就是镜像运行起来提供服务器
利用下列命令后构建自己镜像。
FROM 基础镜像,一切从这里构建
MAINTAINER #镜像是谁写的,姓名+邮箱,
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomact 镜像,这个tomcat 压缩包,添加内容
WORKDIR #镜像的工作目录、/
VOLUME #镜像的工作目录
EXPOSE #暴露端口配置
RUN # 运行镜像成为容器
CMD #z指定这个容器启动的时候需要运行的命令只有最后一个生效可被替代
ENTRYPOINT # 指定这个容器启动的时候需要运行的命令可以追加命令
ONBUIL # 当构建镜像一个被继承dockerfile这个时候就会运行ONBUTILO的指令,触发指令
COPY #类似ADD 将我们文件拷贝到镜像中
ENY #构建的时候设置环境变量!
docker HUB99%镜像都是从这个基础镜像FROM,然后配置时候需要软件和配置过来的,
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL
org.label-schema.schema-version="1.0"
org.label-schema.name="CentOS Base Image"
org.label-schema.vendor="CentOS"
org.label-schema.license="GPLv2"
org.label-schema.build-date="20201113"
org.opencontainers.image.title="CentOS Base Image"
org.opencontainers.image.vendor="CentOS"
org.opencontainers.image.licenses="GPL-2.0-only"
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
创建自己的centos
运行第一步,[root@localhost ~]# mkdir dcoerfile
打开另一个终端输入下面的
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kuangshen/centos latest 1db844ed918a 47 hours ago 231MB
tomcat0001 1.0 09ef6b2e826f 3 days ago 684MB
tomcat0001 latest a22c9a74a6f8 3 days ago 684MB
tomcat latest 13b1026f5ad2 3 days ago 684MB
nginx latest 605c77e624dd 7 days ago 141MB
tomcat 9.0 b8e65a4d736d 2 weeks ago 680MB
tomcat <none> fb5657adc892 2 weeks ago 680MB
redis latest 7614ae9453d1 2 weeks ago 113MB
mysql 5.7 c20987f18b13 2 weeks ago 448MB
centos latest 5d0da3dc9764 3 months ago 231MB
portainer/portainer latest 580c0e4e98b0 9 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 21 months ago 791MB
运行第二步
[root@localhost ~]# docker run -it centos
#切回终端,
[root@localhost ~]# ls
anaconda-ks.cfg hi.sh
dcoerfile javase8u211-later-archive-downloads.html
docker mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
docker-test-volume --restart=alwys
hava.java shcode
hellworld.sh
[root@localhost ~]# cd dcoerfile
[root@localhost dcoerfile]# ls
[root@localhost dcoerfile]# vim mydockerfile
#输入下面的代码
FROM centos
MAINTAINER lingluan<1186960510@qq.com>
ENV MYPATH /usr/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
通过这个文件构建镜像。
#运行第三步
[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:0.1 . 这里是空格点
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 5d0da3dc9764
Step 2/10 : MAINTAINER lingluan<1186960510@qq.com>
---> Running in 4871eb77269f
Removing intermediate container 4871eb77269f
---> 301faa5505ff
Step 3/10 : ENV MYPATH /usr/local
---> Running in 9885fc6204de
Removing intermediate container 9885fc6204de
---> 35db68330bf9
Step 4/10 : WORKDIR $MYPATH
---> Running in 29023743a2e2
[root@localhost dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 0.1 dc825ed1d5e4 38 seconds ago 326MB
kuangshen/centos latest 1db844ed918a 2 days ago 231MB
tomcat0001 1.0 09ef6b2e826f 3 days ago 684MB
tomcat0001 latest a22c9a74a6f8 3 days ago 684MB
tomcat latest 13b1026f5ad2 3 days ago 684MB
nginx latest 605c77e624dd 7 days ago 141MB
tomcat 9.0 b8e65a4d736d 2 weeks ago 680MB
tomcat <none> fb5657adc892 2 weeks ago 680MB
redis latest 7614ae9453d1 2 weeks ago 113MB
mysql 5.7 c20987f18b13 2 weeks ago 448MB
centos latest 5d0da3dc9764 3 months ago 231MB
portainer/portainer latest 580c0e4e98b0 9 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 21 months ago 791MB
[root@localhost dockerfile]# docker run -it mycentos:0.1 进入构建的镜像创建的容器
[root@b7b5d47ebb29 local]# pwd 默认的目录
/usr/local
[root@b7b5d47ebb29 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 147 bytes 6494 (6.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker history 容器id 查看容器是怎么一步步生成的,
[root@localhost dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 0.1 dc825ed1d5e4 8 minutes ago 326MB
kuangshen/centos latest 1db844ed918a 2 days ago 231MB
tomcat0001 1.0 09ef6b2e826f 3 days ago 684MB
tomcat0001 latest a22c9a74a6f8 3 days ago 684MB
tomcat latest 13b1026f5ad2 3 days ago 684MB
nginx latest 605c77e624dd 7 days ago 141MB
tomcat 9.0 b8e65a4d736d 2 weeks ago 680MB
tomcat <none> fb5657adc892 2 weeks ago 680MB
redis latest 7614ae9453d1 2 weeks ago 113MB
mysql 5.7 c20987f18b13 2 weeks ago 448MB
centos latest 5d0da3dc9764 3 months ago 231MB
portainer/portainer latest 580c0e4e98b0 9 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 21 months ago 791MB
[root@localhost dockerfile]# docker history mycentos 后面应该跟容器id
Error response from daemon: No such image: mycentos:latest
[root@localhost dockerfile]# docker history dc825ed1d5e 可以查看这个容器是怎么做起来的,
IMAGE CREATED CREATED BY SIZE COMMENT
dc825ed1d5e4 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
3ff91ddeb17d 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
47df6fb91527 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
42f3ab121cb6 9 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
ac0900524521 9 minutes ago /bin/sh -c yum -y install net-tools 28.4MB
693a5e9d0c41 10 minutes ago /bin/sh -c yum -y install vim 66.3MB
8a988f97eafb 19 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
35db68330bf9 19 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
301faa5505ff 19 minutes ago /bin/sh -c #(nop) MAINTAINER lingluan<11869… 0B
5d0da3dc9764 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
[root@localhost dockerfile]#
CMD 和ENTRYPOINT 区别
CMD #指定这个容器的时候要运行的命令,只有最后一个才会生效,可被替代
ENTRYPOINT #指定这个容器的时候要运行的命令,可以追加指令
测试CMD
#编写dockerfile文件
[root@localhost ~]# vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
#构建镜像
[root@localhost ~]# docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon 645.2MB
#run 运行 发现命令ls -a命令生效
[root@localhost ~]# docker run d8eecbfcc40d
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
#想追加一个命令-l ls -al
[root@localhost ~]# docker run d8eecbfcc40d -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
#cmd 的清理下 -l 替换了["ls","-l"]命令,-l 不是命令所以报错
测试ENTRYPOINT
[root@localhost ~]#vim dockerfile-cmd-entory
FROM centos
CMD ["ls","-a"]
[root@localhost ~]# docker build -f dockerfile-cmd-entory -t entorypoint-test .
Sending build context to Docker daemon 645.2MB
Step 1/2 : FROM centos
---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
---> Running in 74443fa6a1d3
Removing intermediate container 74443fa6a1d3
---> f330c8fbdcd4
Successfully built f330c8fbdcd4
Successfully tagged entorypoint-test:latest
[root@localhost ~]# docker run f330c8fbdcd4
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
#追加命令直接拼接在我们的ENTRYPOINT 命令的后面
[root@localhost ~]# docker run f330c8fbdcd4 -l
total 0
drwxr-xr-x 1 root root 6 Jan 7 03:17 .
drwxr-xr-x 1 root root 6 Jan 7 03:17 ..
-rwxr-xr-x 1 root root 0 Jan 7 03:17 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 Jan 7 03:17 dev
drwxr-xr-x 1 root root 66 Jan 7 03:17 etc
drwxr-xr-x 2 root root 6 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 6 Sep 15 14:17 lost+found
drwxr-xr-x 2 root root 6 Nov 3 2020 media
drwxr-xr-x 2 root root 6 Nov 3 2020 mnt
drwxr-xr-x 2 root root 6 Nov 3 2020 opt
dr-xr-xr-x 120 root root 0 Jan 7 03:17 proc
dr-xr-x--- 2 root root 162 Sep 15 14:17 root
drwxr-xr-x 11 root root 163 Sep 15 14:17 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Jan 6 06:51 sys
drwxrwxrwt 7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x 12 root root 144 Sep 15 14:17 usr
drwxr-xr-x 20 root root 262 Sep 15 14:17 var
Dockerfile很多命令相似的,
准备tomcat 压缩包jdk的压缩包
FROM centos
MAINTAINER lingluan<1186960510@qq.com>
COPY readme.txt /usr/local/readame.txt
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.7.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.7
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.7
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.7/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.7/bin/logs/catalina.out
/bin/sh: /usr/local/apache-tomcat-9.0.22/bin/startup.sh: Permission denied
docker build -t diytomcat .
Sending build context to Docker daemon 840.3MB
Step 1/15 : FROM centos
---> 5d0da3dc9764
Step 2/15 : MAINTAINER lingluan<1186960510@qq.com>
---> Using cache
---> 301faa5505ff
Step 3/15 : COPY readme.txt /usr/local/readame.txt
---> Using cache
---> feefda9664ab
Step 4/15 : ADD jdk-8u181-linux-x64.tar.gz /usr/local/
---> 862351dbf096
Step 5/15 : ADD apache-tomcat-9.0.7.tar.gz /usr/local/
---> 7b29d03f0196
Step 6/15 : RUN yum -y install vim
---> Running in d64eb090b4c2
CentOS Linux 8 - AppStream 1.4 MB/s | 8.4 MB 00:06
CentOS Linux 8 - BaseOS 5.0 MB/s | 4.6 MB 00:00
CentOS Linux 8 - Extras 16 kB/s | 10 kB 00:00
Last metadata expiration check: 0:00:01 ago on Fri Jan 7 04:37:00 2022.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-16.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-16.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-16.el8 appstream 49 k
which x86_64 2.21-16.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
[root@localhost ~]# docker run -d -p 9090:8080 --name lingluantomcat01 -v /root/lingluan/build/tomcat/test/:/url/local/apache-tomcat-9.0.7/webapps/test -v /root/lingluan/build/tomcat/tomcatlogs/:/url/local/apache-tomcat-9.0.7/lo
cd /root/lingluan/build/tomcat/test