Docker|Docker快速入门总结笔记


文章目录

    • 1. Docker概述
    • 2. 虚拟化技术和容器化技术
    • 3. Docker的基本组成
    • 4. Docker的安装
    • 5. Docker的卸载
    • 6. 配置阿里云镜像加速
    • 8. Docker容器运行流程
    • 9. 底层原理
    • 10. Docker常用命令
      • 10.1 基础命令
      • 10.2 镜像命令
      • 10.3 容器命令
      • 10.4 其他常用命令
    • 11. 图形化管理工具Portaniner安装
    • 12. Docker镜像详解
      • 12.1 什么是镜像
      • 12.2 Docker镜像加载原理
      • 12.3 分层理解
      • 12.4 提交镜像
    • 13. 常用容器部署
      • 13.1 Nginx部署
      • 13.2 Tomcat部署
      • 13.3 ElasticSearch部署

1. Docker概述 (1)基本介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。官网:https://docs.docker.com/
(2)应用场景
  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
(3)Docker 的优势
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序。Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
2. 虚拟化技术和容器化技术 虚拟化技术特点:1.资源占用多 2.冗余步骤多 3.启动很慢
容器化技术:容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机的不同:
1.传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
2.Docker容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟硬件。
3.每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。
容器化带来的好处:
Docker|Docker快速入门总结笔记
文章图片

3. Docker的基本组成 Docker的基本组成图如下:
Docker|Docker快速入门总结笔记
文章图片

说明:
Docker|Docker快速入门总结笔记
文章图片

4. Docker的安装 【Docker|Docker快速入门总结笔记】查看系统的内核:
uname -r
系统内核版本为3.10.0
[root@iZwz99sm8v95sckz8bd2c4Z ~]# uname -r 3.10.0-957.21.3.el7.x86_64

查看系统配置
cat /etc/os-release
[root@iZwz99sm8v95sckz8bd2c4Z ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0; 31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"

Docker的安装步骤:
(1)卸载旧的版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine

(2)下载需要的安装包
yum install -y yum-utils

(3)设置镜像的仓库
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo#国外的地址# 设置阿里云的Docker镜像仓库 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#国外的地址

(4)更新yum软件包索引
yum makecache fast

(5)安装docker相关的配置
docker-ce 是社区版,docker-ee 企业版
yum install docker-ce docker-ce-cli containerd.io

出现了completed即安装成功。
(6)启动Docker
systemctl start docker # 查看当前版本号,是否启动成功 docker version # 设置开机自启动 systemctl enable docker

结果:
Docker|Docker快速入门总结笔记
文章图片

下载hello-world镜像进行测试
Docker|Docker快速入门总结笔记
文章图片

查看下载的hello world镜像
[root@iZwz99sm8v95sckz8bd2c4Z lib]# docker images REPOSITORYTAGIMAGE IDCREATEDSIZE hello-worldlatestbf756fb1ae6511 months ago13.3kB

5. Docker的卸载
# 1. 卸载依赖 yum remove docker-ce docker-ce-cli containerd.io # 2. 删除资源. /var/lib/docker是docker的默认工作路径 rm -rf /var/lib/docker

6. 配置阿里云镜像加速 (1)进入阿里云官网,搜索容器镜像服务
Docker|Docker快速入门总结笔记
文章图片

(2)依次执行官方的这四条命令
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://axvfsf7e.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

8. Docker容器运行流程 启动一个容器,Docker的运行流程如下图:
Docker|Docker快速入门总结笔记
文章图片

9. 底层原理 Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socker从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
Docker|Docker快速入门总结笔记
文章图片

Docker为什么比VM Ware快?
1、Docker比虚拟机更少的抽象层
2、docker利用宿主机的内核,VM需要的是Guest OS
Docker|Docker快速入门总结笔记
文章图片

Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:
Docker|Docker快速入门总结笔记
文章图片

10. Docker常用命令 10.1 基础命令
docker version#查看docker的版本信息 docker info#查看docker的系统信息,包括镜像和容器的数量 docker 命令 --help#帮助命令(可查看可选的参数) docker COMMAND --help

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/
10.2 镜像命令
1.docker images 查看本地主机的所有镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images REPOSITORYTAGIMAGE IDCREATEDSIZE hello-worldlatestbf756fb1ae6511 months ago13.3kB#解释: 1.REPOSITORY镜像的仓库源2.TAG镜像的标签3.IMAGE ID 镜像的id4.CREATED 镜像的创建时间5.SIZE 镜像的大小# 可选参数-a/--all 列出所有镜像-q/--quiet 只显示镜像的id

2.docker search 搜索镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED mysqlMySQL is a widely used, open-source relation…10308[OK] mariadbMariaDB is a community-developed fork of MyS…3819[OK] mysql/mysql-serverOptimized MySQL Server Docker images. Create…754[OK] perconaPercona Server is a fork of the MySQL relati…517[OK] centos/mysql-57-centos7MySQL 5.7 SQL database server86 mysql/mysql-clusterExperimental MySQL Cluster Docker images. Cr…79 centurylink/mysqlImage containing mysql. Optimized to be link…60[OK]#可选参数Search the Docker Hub for imagesOptions: -f, --filter filterFilter output based on conditions provided --format stringPretty-print search using a Go template --limit intMax number of search results (default 25) --no-truncDon't truncate output#搜索收藏数大于3000的镜像 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000 NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED mysqlMySQL is a widely used, open-source relation…10308[OK] mariadbMariaDB is a community-developed fordockerk of MyS…3819[OK]

3.docker pull 镜像名[:tag] 下载镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql Using default tag: latest#如果不写tag默认就是latest latest: Pulling from library/mysql 6ec7b7d162b2: Pull complete#分层下载,docker image的核心-联合文件系统 fedd960d3481: Pull complete 7ab947313861: Pull complete 64f92f19e638: Pull complete 3e80b17bff96: Pull complete 014e976799f9: Pull complete 59ae84fee1b3: Pull complete ffe10de703ea: Pull complete 657af6d90c83: Pull complete 98bfb480322c: Pull complete 6aa3859c4789: Pull complete 1ed875d851ef: Pull complete Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest#下载来源的真实地址#docker pull mysql等价于docker pull docker.io/library/mysql:latest

指定版本下载
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql 6ec7b7d162b2: Already exists fedd960d3481: Already exists 7ab947313861: Already exists 64f92f19e638: Already exists 3e80b17bff96: Already exists 014e976799f9: Already exists 59ae84fee1b3: Already exists 7d1da2a18e2e: Pull complete 301a28b700b9: Pull complete 529dc8dbeaf3: Pull complete bc9d021dc13f: Pull complete Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7

4.docker rmi 删除镜像
#1.删除指定的镜像id [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f镜像id #2.删除多个镜像id [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f镜像id 镜像id 镜像id #3.删除全部的镜像id [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f$(docker images -aq)

10.3 容器命令
如拉取一个centos容器
docker pull centos

运行容器
docker run [可选参数] image#参数说明 --name="名字"指定容器名字 -d后台方式运行 -it使用交互方式运行,进入容器查看内容 -p指定容器的端口 ( -p ip:主机端口:容器端口配置主机端口映射到容器端口 -p 主机端口:容器端口 -p 容器端口 ) -P随机指定端口(大写的P)

进入容器
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash [root@bd1b8900c547 /]# ls bindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar

退出容器
#exit 停止并退出容器(后台方式运行则仅退出) #Ctrl+P+Q不停止容器退出 [root@bd1b8900c547 /]# exit exit [root@iZwz99sm8v95sckz8bd2c4Z ~]#

列出运行过的容器
#docker ps # 列出当前正在运行的容器 -a# 列出所有容器的运行记录 -n=? # 显示最近创建的n个容器 -q# 只显示容器的编号[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES bca129320bb5centos"/bin/bash"4 minutes agoExited (0) 3 minutes agooptimistic_shtern bd1b8900c547centos"/bin/bash"6 minutes agoExited (0) 5 minutes agocool_tesla cf6adbf1b506bf756fb1ae65"/hello"5 hours agoExited (0) 5 hours agooptimistic_darwin

删除容器
docker rm 容器id#删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -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#强制停止当前容器

10.4 其他常用命令
1.日志的查看:
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --helpUsage:docker logs [OPTIONS] CONTAINERFetch the logs of a containerOptions: --detailsShow extra details provided to logs -f, --followFollow log output --since stringShow logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes) -n, --tail stringNumber of lines to show from the end of the logs (default "all") -t, --timestampsShow timestamps --until stringShow logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)常用: docker logs -tf 容器id docker logs --tail number 容器id #num为要显示的日志条数#docker容器后台运行,必须要有一个前台的进程,否则会自动停止 #编写shell脚本循环执行,使得centos容器保持运行状态 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true; do echo hi; sleep 5; done" c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c703b5b1911fcentos"/bin/sh -c 'while t…"13 seconds agoUp 10 secondspedantic_banach [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f 2020-12-27T03:34:07.255599560Z hi 2020-12-27T03:34:12.257641517Z hi 2020-12-27T03:34:17.259706294Z hi 2020-12-27T03:34:22.261693707Z hi 2020-12-27T03:34:27.262609289Z hi 2020-12-27T03:34:32.267862677Z hi 2020-12-27T03:34:37.270382873Z hi 2020-12-27T03:34:42.272414182Z hi 2020-12-27T03:34:47.274823243Z hi 2020-12-27T03:34:52.277419274Z hi

2.查看容器中进程信息
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f UIDPIDPPIDCSTIMETTYTIMECMD root1115611135011:31?00:00:00/bin/sh -c while true; do echo hi; sleep 5; done root1188611156011:43?00:00:00/usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

3.查看容器的元数据
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id

4.进入当前正在运行的容器
因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置
方式一:
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash [root@c703b5b1911f /]# ls bindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar [root@c703b5b1911f /]# ps -ef UIDPIDPPIDC STIME TTYTIME CMD root100 03:31 ?00:00:00 /bin/sh -c while true; do echo hi; sleep 5; done root27900 03:54 pts/000:00:00 /bin/bash root31510 03:56 ?00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5 root3162790 03:56 pts/000:00:00 ps -ef

方式二:
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f

docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程
拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash [root@c703b5b1911f /]# cd home [root@c703b5b1911f home]# ls #touch 新建文件 [root@c703b5b1911f home]# touch test.java [root@c703b5b1911f home]# ls test.java [root@c703b5b1911f home]# exit exit [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c703b5b1911fcentos"/bin/sh -c 'while t…"35 minutes agoUp 35 minutespedantic_banach [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home [root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /home haipantest.java

命令小节的图解如下:
Docker|Docker快速入门总结笔记
文章图片

11. 图形化管理工具Portaniner安装 Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(CI/CD再用)
下载运行Portaniner镜像并运行,设置本机映射端口为8088
[root@localhost conf]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer Unable to find image 'portainer/portainer:latest' locally latest: Pulling from portainer/portainer 94cfa856b2b1: Pull complete 49d59ee0881a: Pull complete a2300fd28637: Pull complete Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f Status: Downloaded newer image for portainer/portainer:latest 8c525a0137be22965bd1e3944da622a2c4248f8ad20883f4b3ea4f8a6b11e163 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 7789d4505a00portainer/portainer"/portainer"6 seconds agoUp 5 seconds0.0.0.0:8088->9000/tcpquirky_sinoussi

第一次登录设置admin用户的密码
Docker|Docker快速入门总结笔记
文章图片

如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:
Docker|Docker快速入门总结笔记
文章图片

12. Docker镜像详解 12.1 什么是镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。
12.2 Docker镜像加载原理
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。
Docker|Docker快速入门总结笔记
文章图片

Docker|Docker快速入门总结笔记
文章图片

12.3 分层理解
Docker|Docker快速入门总结笔记
文章图片

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker image inspect nginx:latest [ {"Id": "sha256:ae2feff98a0cc5095d97c6c283dcd33090770c76d63877caa99aefbbe4343bdd", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "nginx@sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9" ], "Parent": "", "Comment": "", "Created": "2020-12-15T20:21:00.007674532Z", "Container": "4cc5da85f27ca0d200407f0593422676a3bab482227daee044d797d1798c96c9", "ContainerConfig": {"Hostname": "4cc5da85f27c", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": {"80/tcp": { } }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NGINX_VERSION=1.19.6", "NJS_VERSION=0.5.0", "PKG_RELEASE=1~buster" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"nginx\" \"-g\" \"daemon off; \"]" ], "Image": "sha256:13bffe371b56f4aeed88218ec17d0c6f653a83b49bd3e211fc8cfa2ca5d7a3d3", "Volumes": null, "WorkingDir": "", "Entrypoint": [ "/docker-entrypoint.sh" ], "OnBuild": null, "Labels": {"maintainer": "NGINX Docker Maintainers " }, "StopSignal": "SIGQUIT" }, "DockerVersion": "19.03.12", "Author": "", "Config": {"Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": {"80/tcp": { } }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NGINX_VERSION=1.19.6", "NJS_VERSION=0.5.0", "PKG_RELEASE=1~buster" ], "Cmd": [ "nginx", "-g", "daemon off; " ], "Image": "sha256:13bffe371b56f4aeed88218ec17d0c6f653a83b49bd3e211fc8cfa2ca5d7a3d3", "Volumes": null, "WorkingDir": "", "Entrypoint": [ "/docker-entrypoint.sh" ], "OnBuild": null, "Labels": {"maintainer": "NGINX Docker Maintainers " }, "StopSignal": "SIGQUIT" }, "Architecture": "amd64", "Os": "linux", "Size": 132935043, "VirtualSize": 132935043, "GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/cb791e78a08db7091bf2ce1d78603f1758f52199e57f1805156fe30e39067aae/diff:/var/lib/docker/overlay2/1e73a72b25af68ee9abf4eb443f778d31226e12e9af428fcc14c7b044c83b258/diff:/var/lib/docker/overlay2/88c9c01762f2af8327db65d0b0d4a64785e87c9c2ab76c62e7d03619db03a985/diff:/var/lib/docker/overlay2/7304ab112ac4a9cb91fc6f74730be28fecbe19f042e92d321aa9181424cc4b2e/diff", "MergedDir": "/var/lib/docker/overlay2/48b288740bbb2b07b41ed43a4d17a005c46b08d3357d2960b5ef7db4b2de6618/merged", "UpperDir": "/var/lib/docker/overlay2/48b288740bbb2b07b41ed43a4d17a005c46b08d3357d2960b5ef7db4b2de6618/diff", "WorkDir": "/var/lib/docker/overlay2/48b288740bbb2b07b41ed43a4d17a005c46b08d3357d2960b5ef7db4b2de6618/work" }, "Name": "overlay2" }, "RootFS": {"Type": "layers", "Layers": [ "sha256:87c8a1d8f54f3aa4e05569e8919397b65056aa71cdf48b7f061432c98475eee9", "sha256:5c4e5adc71a82a96f02632433de31c998c5a9e2fccdcbaee780ae83158fac4fa", "sha256:7d2b207c26790f693ab1942bbe26af8e2b6a14248969e542416155a912fec30d", "sha256:2c7498eef94aef8c40d106f3e42f7da62b3eee8fd36012bf7379becc4cd639a2", "sha256:4eaf0ea085df254fd5d2beba4e2c11db70a620dfa411a8ad44149e26428caee4" ] }, "Metadata": {"LastTagTime": "0001-01-01T00:00:00Z" } } ]

这里指示了分层信息:
"RootFS": {"Type": "layers", "Layers": [ "sha256:87c8a1d8f54f3aa4e05569e8919397b65056aa71cdf48b7f061432c98475eee9", "sha256:5c4e5adc71a82a96f02632433de31c998c5a9e2fccdcbaee780ae83158fac4fa", "sha256:7d2b207c26790f693ab1942bbe26af8e2b6a14248969e542416155a912fec30d", "sha256:2c7498eef94aef8c40d106f3e42f7da62b3eee8fd36012bf7379becc4cd639a2", "sha256:4eaf0ea085df254fd5d2beba4e2c11db70a620dfa411a8ad44149e26428caee4" ] },

Docker|Docker快速入门总结笔记
文章图片

Docker|Docker快速入门总结笔记
文章图片

Docker|Docker快速入门总结笔记
文章图片

12.4 提交镜像
使用docker commit 命令提交容器成为一个新的版本docker commit -m=“提交的描述信息”-a="作者" 容器id 目标镜像名:[TAG]

由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:
#1.复制文件夹 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it tomcat /bin/bash root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# cd ../ root@2a3bf3eaa2e4:/usr/local/tomcat# cp -r webapps.dist/* webapps root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls ROOTdocsexampleshost-managermanager [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 2a3bf3eaa2e4tomcat"/bin/bash"4 minutes agoUp 4 minutes8080/tcpcompetent_torvalds 7789d4505a00portainer/portainer"/portainer"24 hours agoUp 24 hours0.0.0.0:8088->9000/tcpquirky_sinoussi [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it 2a3bf3eaa2e4 /bin/bash root@2a3bf3eaa2e4:/usr/local/tomcat# cd webapps root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# ls ROOTdocsexampleshost-managermanager root@2a3bf3eaa2e4:/usr/local/tomcat/webapps# cd ../ root@2a3bf3eaa2e4:/usr/local/tomcat# read escape sequence [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 2a3bf3eaa2e4tomcat"/bin/bash"8 minutes agoUp 8 minutes8080/tcpcompetent_torvalds 7789d4505a00portainer/portainer"/portainer"24 hours agoUp 24 hours0.0.0.0:8088->9000/tcpquirky_sinoussi #2.提交镜像作为一个新的镜像[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker commit -m="add webapps" -a="Ethan" 2a3bf3eaa2e4 mytomcat:1.0 sha256:f189aac861de51087af5bc88a5f1de02d9574e7ee2d163c647dd7503a2d3982b [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images REPOSITORYTAGIMAGE IDCREATEDSIZE mytomcat1.0f189aac861de7 seconds ago653MB mysql5.7f07dfa83b5286 days ago448MB tomcatlatestfeba8d001e3f10 days ago649MB nginxlatestae2feff98a0c12 days ago133MB centoslatest300e315adb2f2 weeks ago209MB portainer/portainerlatest62771b0b9b095 months ago79.1MB elasticsearch7.6.2f29a1ee410309 months ago791MB#3.运行容器[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it mytomcat:1.0 /bin/bash root@1645774d4605:/usr/local/tomcat# cd webapps root@1645774d4605:/usr/local/tomcat/webapps# ls ROOTdocsexampleshost-managermanager wz99sm8v95sckz8bd2c4Z ~]# docker images REPOSITORYTAGIMAGE IDCREATEDSIZE mytomcat1.0f189aac861de7 seconds ago653MB mysql5.7f07dfa83b5286 days ago448MB tomcatlatestfeba8d001e3f10 days ago649MB nginxlatestae2feff98a0c12 days ago133MB centoslatest300e315adb2f2 weeks ago209MB portainer/portainerlatest62771b0b9b095 months ago79.1MB elasticsearch7.6.2f29a1ee410309 months ago791MB

13. 常用容器部署 13.1 Nginx部署
(1)搜索并下载镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search nginx NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED nginxOfficial build of Nginx.14207[OK] jwilder/nginx-proxyAutomated Nginx reverse proxy for docker con…1932[OK] richarvey/nginx-php-fpmContainer running Nginx + PHP-FPM capable of…797[OK] linuxserver/nginxAn Nginx container, brought to you by LinuxS…137 jc21/nginx-proxy-managerDocker container for managing Nginx proxy ho…123 tiangolo/nginx-rtmpDocker image with Nginx using the nginx-rtmp…107[OK] [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 6ec7b7d162b2: Already exists cb420a90068e: Pull complete 2766c0bf2b07: Pull complete e05167b6a99d: Pull complete 70ac9d795e79: Pull complete Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images; REPOSITORYTAGIMAGE IDCREATEDSIZE mysql5.7f07dfa83b5285 days ago448MB nginxlatestae2feff98a0c11 days ago133MB centoslatest300e315adb2f2 weeks ago209MB

可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx
(2)运行测试
docker run -d --name nginx01 -p 3334:80 nginx-d 后台运行 --name 给容器命名 -p 3334:80 将宿主机的端口3334映射到该容器的80端口

运行结果:
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash Error: No such container: nginx01 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name nginx01 -p 3334:80 nginx 20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 20c896637ff5nginx"/docker-entrypoint.…"7 seconds agoUp 5 seconds0.0.0.0:3334->80/tcpnginx01

端口暴露的概念:
Docker|Docker快速入门总结笔记
文章图片

(3)配置文件
进入容器,自定义配置文件
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash root@20c896637ff5:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@20c896637ff5:/# cd /etc/nginx root@20c896637ff5:/etc/nginx# ls conf.d fastcgi_params koi-utfkoi-winmime.typesmodulesnginx.confscgi_params uwsgi_paramswin-utf root@20c896637ff5:/# cd /etc/nginx root@20c896637ff5:/etc/nginx# ls conf.d fastcgi_params koi-utfkoi-winmime.typesmodulesnginx.confscgi_params uwsgi_paramswin-utf

(4)访问测试
本地主机访问测试,curl命令发起请求,如果使用阿里云服务器需要设置安全组。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 20c896637ff5nginx"/docker-entrypoint.…"7 minutes agoUp 7 minutes0.0.0.0:3334->80/tcpnginx01 [root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3334 Welcome to nginx! - 锐客网 > body {width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } 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.

13.2 Tomcat部署
(1)下载并运行
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 6c33745f49b4: Pull complete ef072fc32a84: Pull complete c0afb8e68e0b: Pull complete d599c07d28e6: Pull complete e8a829023b97: Pull complete d04be46a31d1: Pull complete db6007c69c35: Pull complete e4ad4c894bce: Pull complete 248895fda357: Pull complete 277059b4cba2: Pull complete Digest: sha256:57dae7dfb9b62a413cde65334c8a18893795cac70afc3be589c8336d8244655d Status: Downloaded newer image for tomcat:latest docker.io/library/tomcat:latest [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -p 3335:8080 --name tomcat01 tomcat 7136295a6082cb0f805b025a1471bde02ead4864be3e2c9dcd337b1dde0a3113

(2)进入容器
1.容器中的命令是少了
2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it tomcat01 /bin/bash root@7136295a6082:/usr/local/tomcat# ls BUILDING.txtCONTRIBUTING.mdLICENSE NOTICE README.mdRELEASE-NOTESRUNNING.txtbinconfliblogsnative-jni-libtempwebappswebapps.distwork root@7136295a6082:/usr/local/tomcat# cd webapps.dist root@7136295a6082:/usr/local/tomcat/webapps.dist# ls ROOTdocsexampleshost-managermanager root@7136295a6082:/usr/local/tomcat/webapps.dist# cd ROOT root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# ls RELEASE-NOTES.txtWEB-INFasf-logo-wide.svgbg-button.pngbg-middle.pngbg-nav.pngbg-upper.pngfavicon.icoindex.jsptomcat.csstomcat.svg root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT# cd ../../ root@7136295a6082:/usr/local/tomcat# cd webapps root@7136295a6082:/usr/local/tomcat/webapps# ls root@7136295a6082:/usr/local/tomcat/webapps# cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ root@7136295a6082:/usr/local/tomcat/webapps# ls ROOTdocsexampleshost-managermanager root@7136295a6082:/usr/local/tomcat/webapps# exit exit

(3)访问测试
[root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3335 Apache Tomcat/9.0.41 - 锐客网

13.3 ElasticSearch部署
添加 ’-e ES_JAVA_OPTS="-Xms128m -Xmx512m" ‘ 配置ElasticSearch的虚拟机占用的内存大小。
docker stats 查看资源占用情况
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m" elasticsearch:7.6.2[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m" elasticsearch:7.6.2 3b8cd4991814896c523ee67b84ce198e32bd82b1a62d512b198138a58ca946f1 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 3b8cd4991814elasticsearch:7.6.2"/usr/local/bin/dock…"10 seconds agoUp 6 seconds0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcpelasticsearch01 [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker stats

Docker系列文章:
1.Docker快速入门总结笔记
2.Docker容器数据卷详解
3.Dockerfile详解与镜像发布
笔记总结:https://www.bilibili.com/video/BV1og4y1q7M4

    推荐阅读