栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker学习笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker学习笔记

Docker概述

类似集装箱隔离,

jar — 容器(mysql,redis)----发布到仓库-----从仓库下载

Docker历史

2010年dotcloud公司成立

2013 Docker开源

2014年4月9日,Docker1.0发布

在此之前都是用的虚拟机

基于go语言开发

Docker安装
#卸载旧版本
yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
#需要的安装包
yum install -y yum-utils
#设置镜像的仓库
yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#安装docker docker-ce社区版,ee企业版
yum install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
#重启
systemctl restart docker
#查看版本
docker version
#运行hello-world
docker run hello-world
#查看镜像
[root@VM-0-15-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   5 weeks ago   13.3kB
#卸载docker
yum remove docker-ce docker-ce-cli containerd.io
#删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
回顾hello-world流程

底层原理
  • Docker是怎么工作的?
    Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访
    问!
    Docker-Server接收到Docker-Client的指令,就会执行这个命令!

  • 为什么Docker比Vm快?
    1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在
    docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在
    效率上有明显优势。
    2、docker利用的是宿主机的内核,而不需要Guest OS。
    GuestOS: VM(虚拟机)里的的系统(OS);
    HostOS:物理机里的系统(OS);

因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。然而避免引导、加
载操作系统内核是个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返
个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此
新建一个docker容器只需要几秒钟。

Docker的常用命令 帮助命令
docker version
docker info
docker <命令> --help

帮助文档

镜像命令
#查看镜像
docker images
docker images -q
docker images -a

[root@VM-0-15-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   5 weeks ago   13.3kB

REPOSITORY 镜像仓库源
#搜索镜像
[root@VM-0-15-centos ~]# docker search mysql
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11635     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4429      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   863                  [OK]
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   362       [OK]       
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   91                   

#可选项,根据搜藏来过滤
--filter=STARS=3000 搜索出来的镜像就是STARS>3000
#拉取镜像
docker pull mysql[:tag]
tag版本号

[root@VM-0-15-centos ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认是latest
latest: Pulling from library/mysql
b380bbd43752: Pull complete # 分层下载,docker image的核心 联合文件系统
f23cbf2ecc5d: Pull complete 
30cfc6c29c0a: Pull complete 
b38609286cbe: Pull complete 
8211d9e66cd6: Pull complete 
2313f9eeca4a: Pull complete 
7eb487d00da0: Pull complete 
4d7421c8152e: Pull complete 
77f3d8811a28: Pull complete 
cce755338cba: Pull complete 
69b753046b9f: Pull complete 
b2e64b0ab53c: Pull complete 
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址

docker pull mysql
#等价于
docker pull mysql[:latest]


#版本更改时,分层不会下载重复的文件
#删除镜像
docker rmi -f mysql:5.7#容器名
docker rmi -f 938b57d64674#容器ID
docker rmi -f 容器ID 容器ID 容器ID 容器ID...#删除多个容器
docker rmi -f $(docker images -aq)#删除全部容器
容器命令
#拉取一个镜像测试
docker pull centos
#新建容器并启动
docker run [可选参数] image

#参数说明
--name="Name" 		容器名字
-d					后台方式运行
-it					交互方式运行,进入容器查看内容
-p					(小写)指定容器的端口
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口
	-p 容器端口

-P					随机指定端口

#测试
docker run -it centos /bin/bash   # 进入容器
exit   # 退出
#列出所有运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近
-q #只显示id

docker ps
docker ps -a #列出当前正在运行的容器+带出历史运行过的容器
exit #停止容器并退出
ctrl + P + Q #容器不停止并退出
#删除容器
docker rm 容器id#删除指定容器,不能删除正在运行的容器,如果要强制删除加上-f
docker rm -f $(docker ps -aq)#删除全部容器
docker ps -a -q|xargs docker rm#删除全部容器
#启动和停止容器
docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止容器
docker kill 容器id		#强制停止容器
常用其他命令
#后台启动容器
[root@VM-0-15-centos ~]# docker run -d centos
cb597e7918560bb7ed2b9e7d068061e49a040e7a090f037d54747e6e56263144
[root@VM-0-15-centos ~]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#问题:发现centos停止了
#原因:docker使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止容器启动后,发现自己没有提供服务,就会立刻停止
#查看日志
docker logs -f -t --tail 显示条数 容器id
docker logs -f -t 容器id
#自己编写脚本
docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"

#显示日志
docker logs -f -t --tail 10 06bea14ffa75
#查看容器中的进程信息
docker top 容器id

[root@VM-0-15-centos ~]# docker top 06bea14ffa75
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                19496               19477               0                   21:13               ?                   00:00:00            /bin/sh -c while true;do echo kuangshen;sleep 1;done
root                20997               19496               0                   21:18               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
#查看镜像的元数据
docker inspect 容器id

[root@VM-0-15-centos ~]# docker inspect 06bea14ffa75
[
    {
        "Id": "06bea14ffa75b860cdfe105f5045b1be83a6639eee9552ffc159ae01b401a5c4",
        "Created": "2021-11-07T13:13:56.785284074Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo kuangshen;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 19496,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-11-07T13:13:57.071684542Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/06bea14ffa75b860cdfe105f5045b1be83a6639eee9552ffc159ae01b401a5c4/resolv.conf",
#进入当前正在运行的容器
#方式一:容器在后台运行时,进入容器
docker exec -it 容器id /bin/bash

[root@VM-0-15-centos ~]# docker exec -it 06bea14ffa75 /bin/bash
[root@06bea14ffa75 /]# ps -ef 
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:13 ?        00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root       719     0  0 13:25 pts/0    00:00:00 /bin/bash
root       742     1  0 13:25 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root       743   719  0 13:25 pts/0    00:00:00 ps -ef

#方式二:容器在后台运行时,进入容器
docker attach 容器id
正在执行当前的代码...
#区别
docker exec		#进入容器后开启一个新的终端
docker attach	#进入容器正在执行的终端,不会启动新的进程
#从容器拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径

[root@VM-0-15-centos home]# docker ps
ConTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
bad34ff90469   centos    "/bin/bash"   31 seconds ago   Up 30 seconds             keen_einstein
[root@VM-0-15-centos home]# docker attach bad34ff90469
[root@bad34ff90469 /]# cd /home/
[root@bad34ff90469 home]# ls
[root@bad34ff90469 home]# touch test.java
[root@bad34ff90469 home]# exit     
exit
[root@VM-0-15-centos home]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-0-15-centos home]# docker cp bad34ff90469:/home/test.java /home
[root@VM-0-15-centos home]# ls
lighthouse  redis  test.java  www

#拷贝是一个手动过程,未来可以使用-v卷的技术,可以实现自动同步
小结

练习

安装nginx

[root@VM-0-15-centos home]# docker search nginx
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        15763     [OK]       
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2091                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   818                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   273                  
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   159                  
tiangolo/nginx-rtmp               Docker image with Nginx using the nginx-rtmp…   143                  [OK]
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        143                  [OK]
alfg/nginx-rtmp                   NGINX, nginx-rtmp-module and FFmpeg from sou…   110                  [OK]
jasonrivers/nginx-rtmp            Docker images to host RTMP streams using NGI…   95                   [OK]
nginxdemos/hello                  NGINX webserver that serves a simple page co…   76                   [OK]
privatebin/nginx-fpm-alpine       PrivateBin running on an Nginx, php-fpm & Al…   60                   [OK]
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   55                   
nginxinc/nginx-unprivileged       Unprivileged NGINX Dockerfiles                  54                   
staticfloat/nginx-certbot         Opinionated setup for automatic TLS certs lo…   25                   [OK]
nginxproxy/nginx-proxy            Automated Nginx reverse proxy for docker con…   24                   
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   22                   
schmunk42/nginx-redirect          A very simple container to redirect HTTP tra…   19                   [OK]
centos/nginx-112-centos7          Platform for running nginx 1.12 or building …   15                   
centos/nginx-18-centos7           Platform for running nginx 1.8 or building n…   13                   
flashspys/nginx-static            Super Lightweight Nginx Image                   11                   [OK]
mailu/nginx                       Mailu nginx frontend                            9                    [OK]
webdevops/nginx                   Nginx container                                 9                    [OK]
sophos/nginx-vts-exporter         Simple server that scrapes Nginx vts stats a…   7                    [OK]
ansibleplaybookbundle/nginx-apb   An APB to deploy NGINX                          3                    [OK]
wodby/nginx                       Generic nginx                                   1                    [OK]
[root@VM-0-15-centos home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
b380bbd43752: Pull complete 
fca7e12d1754: Pull complete 
745ab57616cb: Pull complete 
a4723e260b6f: Pull complete 
1c84ebdff681: Pull complete 
858292fd2e56: Pull complete 
Digest: sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@VM-0-15-centos home]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    87a94228f133   3 weeks ago   133MB
centos       latest    5d0da3dc9764   7 weeks ago   231MB
[root@VM-0-15-centos home]# docker run -d --name nginx01 -p 3344:80 nginx
bd1dd8f51eb8efe2359ed1e21ede663f82fc22a630f83ef87a85f0b24aaa96e3
[root@VM-0-15-centos home]# docker ps
ConTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
bd1dd8f51eb8   nginx     "/docker-entrypoint.…"   3 seconds ago    Up 2 seconds    0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
bad34ff90469   centos    "/bin/bash"              33 minutes ago   Up 16 minutes                                           keen_einstein
[root@VM-0-15-centos home]# curl localhost:3344



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

docker run -d --name nginx01 -p 3344:80 nginx#3344为主机端口号,80为容器端口号

安装tomcat

docker run -it --rm tomcat:9.0 #一般用于测试,用完就删除
docker run -d -p 3355:8080 --name tomca01 tomcat

部署es+kibana

#由于es比较耗内存,执行这个命令会死机
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

#查看cpu,内存等状态
docker stats
#限制内存
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

使用kibana连接es

可视化

docker图形化界面管理工具,提供一个后台面板

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true  portainer/portainer

访问测试

42.193.51.130:8088

Commit镜像
docker commit
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:TAG

测试

#启动一个tomcat
docker run -it -p 8081:8080 tomcat
#复制webapps.dist到websapps
cp -r webapps.dist/* webapps/
#提交镜像
[root@VM-0-15-centos ~]# docker commit -a="ghhgy" -m="add webapps app" e605cafee200 tomcat02:1.0
sha256:2a9f9f5e81867c0be15d11b88200ba76e8876f26506bf20c38e562283268b396
[root@VM-0-15-centos ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
tomcat02              1.0       2a9f9f5e8186   4 seconds ago   684MB
tomcat                latest    b0e0b0a92cf9   2 weeks ago     680MB
nginx                 latest    87a94228f133   3 weeks ago     133MB
centos                latest    5d0da3dc9764   7 weeks ago     231MB
portainer/portainer   latest    580c0e4e98b0   7 months ago    79.1MB
elasticsearch         7.6.2     f29a1ee41030   19 months ago   791MB

容器数据卷

如果数据在容器里,容器删了后数据会丢失

需求:数据持久化

数据可以存储在本地

目录的挂载

容器的持久化和同步操作,容器间可以数据共享

docker run -v 本机目录:容器目录
docker run -it -v /home/ceshi:/home centos /bin/bash
#类似于把本机目录挂载到容器目录,双向绑定

测试

docker pull mysql:5.7

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7

具名和匿名挂载
#匿名挂载
-v容器内的路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有volume
[root@VM-0-15-centos data]# docker volume ls
DRIVER    VOLUME NAME
local     a8af848d9eaef19d1f4250e67d4036f0dd6972d91d61d72370d363637f196cfb

#具名挂载
[root@VM-0-15-centos data]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
82c334c8dca81c12780d2b0698e27495dad4733b7fab15a44944d8ba6e892ff2
[root@VM-0-15-centos data]# docker volume ls
DRIVER    VOLUME NAME
local     a8af848d9eaef19d1f4250e67d4036f0dd6972d91d61d72370d363637f196cfb
local     juming-nginx

#查看路径
[root@VM-0-15-centos data]# docker volume inspect juming-nginx 
[
    {
        "CreatedAt": "2021-11-08T16:59:02+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

大多使用具名挂载

# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

拓展:

# 通过 -v 容器内路径: ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

构建docker镜像的构建文件,命令脚本

FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
--volumes-from list Mount volumes from the specified container(s)
# 测试,我们通过刚才启动的
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v
/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01
mysql:5.7
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name
mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

DockerFile 1.DockerFile介绍

dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
但是很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!

2.DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!

Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简
单!
Docker镜像逐渐成企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。
Docker容器:容器就是镜像运行起来提供服务。

3.DockerFile的指令
# DockerFile常用指令
FROM 		# 基础镜像,一切从这里开始构建
MAINTAINER 	# 镜像是谁写的, 姓名+邮箱
RUN 		# 镜像构建的时候需要运行的命令
ADD 		# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR 	# 镜像的工作目录
VOLUME 		# 挂载的目录
EXPOSE 		# 保留端口配置
CMD 		# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT 	# 指定这个容器启动的时候要运行的命令,可以追加命令
onBUILD 	# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY 		# 类似ADD,将我们文件拷贝到镜像中
ENV 		# 构建的时候设置环境变量!

FROM scratch

创建centos

#1.编写dockerfile
FROM centos
MAINTAINER ghhgy<你的邮箱>

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

#2.构建镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .

#3.运行测试,默认工作目录变成了/usr/local,支持了vim和ifconfig命令

#查看镜像构建历史
[root@VM-0-15-centos dockerfile]# docker history 9956616c2ab2
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
9956616c2ab2   5 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
b300db55d9c9   5 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
e5c27ca58c9c   6 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
b100a7b87ba1   6 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
680c65bf9616   6 minutes ago   /bin/sh -c yum -y install net-tools             33.7MB    
3d2b83702280   6 minutes ago   /bin/sh -c yum -y install vim                   75MB      
80225a43f177   8 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
7984a76b67ce   8 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
a7c6e1014333   8 minutes ago   /bin/sh -c #(nop)  MAINTAINER ghhgy      7 weeks ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
      7 weeks ago     /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB     

CMD 和 ENTYPOINT 区别

CMD 		# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT 	# 指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD

[root@VM-0-15-centos dockerfile]# cat dockerfile-centos-cmd 
FROM centos
CMD ["ls","-a"]

[root@VM-0-15-centos dockerfile]# docker build -f dockerfile-centos-cmd -t cmdtest .

[root@VM-0-15-centos dockerfile]# docker run cmdtest
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#想追加一个-l
[root@VM-0-15-centos dockerfile]# docker run cmdtest -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 替换了CMD["ls","-l"] ,-l 不是命令所以报错

测试ENTRYPOINT

[root@VM-0-15-centos dockerfile]# cat dockerfile-centos-entrypoint 
FROM centos
ENTRYPOINT ["ls","-a"]

[root@VM-0-15-centos dockerfile]# docker build -f dockerfile-centos-entrypoint -t entrypoint-test .

[root@VM-0-15-centos dockerfile]# docker run entrypoint-test
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

[root@VM-0-15-centos dockerfile]# docker run entrypoint-test -l
total 56
drwxr-xr-x   1 root root 4096 Nov  8 10:19 .
drwxr-xr-x   1 root root 4096 Nov  8 10:19 ..
-rwxr-xr-x   1 root root    0 Nov  8 10:19 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Nov  8 10:19 dev
drwxr-xr-x   1 root root 4096 Nov  8 10:19 etc
drwxr-xr-x   2 root root 4096 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 4096 Sep 15 14:17 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 142 root root    0 Nov  8 10:19 proc
dr-xr-x---   2 root root 4096 Sep 15 14:17 root
drwxr-xr-x  11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Nov  8 10:17 sys
drwxrwxrwt   7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x  12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x  20 root root 4096 Sep 15 14:17 var
# ENTRYPOINT的情况下 -l 拼接在ENTRYPOINT命令后

Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测
试效果!

4.实战:Tomcat镜像

1、准备镜像文件
准备tomcat 和 jdk到当前目录,编写好README 。

[root@VM-0-15-centos webapps]# cat /home/mytomcat/Dockerfile 
FROM centos
MAINTAINER ghhgy<你的邮箱>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u211-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.29.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.29
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.29
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.29/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.29/logs/catalina.out

2、构建镜像

docker build -t diytomcat .

3、运行镜像并挂载卷

docker run -d -p 8081:8080 -v /home/mytomcat/webapps/test:/usr/local/apache-tomcat-9.0.29/webapps/test -v /home/mytomcat/logs:/usr/local/apache-tomcat-9.0.29/logs diytomcat

4、在本机/home/mytomcat/webapps/test目录下新建WEB-INFO/web.xml和index.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




菜鸟教程(runoob.com)


Hello World!
<% out.println("你的 IP 地址 " + request.getRemoteAddr()); %>

进入test的url进行访问

5.发布自己的镜像

1、地址 https://hub.docker.com/
2、确定这个账号可以登录
3、登录

[root@VM-0-15-centos test]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
#1、登录
docker login -u ghhgy
#2、把当前的diytomcat:latest tag改成ghhgy/tomcat:1.0,否则无法push
docker tag diytomcat:latest ghhgy/tomcat:1.0
#3、push镜像到dockerhub
docker push ghhgy/tomcat:1.0



小结

Docker网络
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号