Docker快速入门笔记

1、docker概述

1.1、docker基本介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,即相互隔离。

官网地址:https://www.docker.com/

文档地址:https://docs.docker.com/

镜像库地址:https://hub.docker.com/

一个完整的Docker有以下四个部分组成:

  • DockerClient客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • DockerContainer容器

1.2、docker的意义:

在开发过程中,项目开发所依赖的环境完全是OK的,将项目的jar包或者war包交付给运维人员时,前提是另一台机器的环境配置也是ok的,如果每一台机器在运行程序之前都需要单独配置环境,工作量之大不言而喻。

传统的项目部署模式: 安装—配置—运行;

Docker的部署模式:复制 — 运行;

1、交付标准化

正如docker的logo一样,Docker是软件工程领域的“标准化”交付组件,像是运输货物的集装箱一样。众所周知,集装箱能够将大小不一,不易搬运的物品封装成一个整体,它提供了一种通用的封装货物的标准,卡车、火车、货轮等运输工具采用这一标准,使得以集装箱为中心的标准化设计大大提高了物流运输的效率。

传统的软件交付物包括:应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。Docker的标准化交付物称为“镜像”,它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。

2、一次构建,多次交付

Docker镜像可以做到“一次构建,多次交付”。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值。

一次构建,到处运行,这也是docker的理念;

3、应用隔离

在运输的过程中,货物之间可以通过集装箱做到有效的隔离。同样的Docker可以隔离不同应用程序之间的相互影响。

1.3、docker 和 VM ware的差异

虚拟机技术:

  • 在一个操作系统之上,安装运行另外一种操作系统。
  • 需要虚拟出硬件、运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 占用资源比较多、步骤冗余繁杂、启动很慢

docker容器:

  • 将软件运行所需要的资源打包到一个隔离的容器,直接运行在宿主机上,容器本身是没有自己的内核的,也没有虚拟硬件。
  • docker是内核级别的虚拟化,可以在一个物理机上运行很多容器的实例,每个容器之间相互隔离、有自己的文件系统、互不影响,使得服务器的性能发挥到极致。

1.4、docker的组成

Docker 在线文档协作 docker官方文档_Docker 在线文档协作

  • 镜像(Image)
  • 镜像好比是一个模板,一个镜像可以创建出来很多个容器实例;
  • 类似于Java语言中类和对象的概念,即一个类可以实例化出来多个对象。
  • 容器(Container)
  • 独立运行的一个或一组应用, 是由镜像实例化出来的;
  • 它可以被启动、开始、停止、删除。每个容器都是相互隔离的
  • 仓库(Repository)
  • 一个集中存放镜像文件的地方,每个仓库包含多个镜像,每个镜像有不同的标签(‘tag’: 类似于版本号)
  • 仓库种类有私有仓库和公有仓库之分,Docker Hub:(https://hub.docker.com/)是最大的公有仓库

2、docker的安装

前期环境准备:本人购买的是阿里云的1核2G的服务器,具体操作及介绍见博文:

  • 查看Linux系统版本命令: uname -r
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
# 系统内核版本为3.10.0
  • 查看系统配置: cat /etc/os-release
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# 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
  • 旧版本卸载(如果有)
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 \
    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
  • 更新yum软件包索引
yum makecache fast
  • 安装docker
# docker-ce为社区版,docker-ee为企业版
# 该命令默认为安装最新版本
yum install docker-ce docker-ce-cli containerd.io
# 如果想要安装指定版本:
yum install docker-ce-<版本号> docker-ce-cli-<版本号>

# 安装成功会出现 completed提示
  • 启动docker
systemctl start docker

# 查看当前版本号,验证是否启动成功:
docker version

Docker 在线文档协作 docker官方文档_Docker_02

  • 下载hello-world镜像进行测试
docker run hello-world

Docker 在线文档协作 docker官方文档_docker_03

  • 查看所下载的镜像
docker images

Docker 在线文档协作 docker官方文档_Docker_04

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

3、配置阿里云镜像加速

  • 登录阿里云官网,找到镜像加速服务栏: https://cr.console.aliyun.com/cn-beijing/instances/mirrors

Docker 在线文档协作 docker官方文档_docker_05

  • 在控制台依次执行一下四条命令,完成配置
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://h98xb7ko.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

4、docker run 的运行流程:

4.1、hello-world 运行整体流程

Docker 在线文档协作 docker官方文档_Docker 在线文档协作_06

  • 首先会在本机中寻找:hello-world的镜像:
  • 没有在本机找到:Unable to find image hello-world locally
  • 从远程进行下载:pulling from library…
  • 下载完毕:pull compelte
  • 运行成功:hello from docker!

4.2、docker run 的执行流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETbIgH8Z-1652287080144)(E:\02-学习笔记\笔记图片\docker\1-docker run的运行步骤.png)]

Docker 在线文档协作 docker官方文档_容器_07

4.3、底层原理

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问,Docker Server(服务器)接收到Docker-Client (客户端) 的指令,就会执行这个指令。docker容器之间相互隔离,互不影响

Docker 在线文档协作 docker官方文档_运维_08

4.4、Docker VS VM Ware

  • Docker比虚拟机更少的抽象层
  • docker利用宿主机的内核,VM需要的是Guest OS

Docker 在线文档协作 docker官方文档_Docker 在线文档协作_09

Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机则是需要加载Guest OS,虚拟机的这一操作便导致其启动为分钟级别的速度

5、docker的常用命令

5.1 帮助命令

docker version		# 显示docker的版本信息
docker info			# 显示docker的信息 包括镜像和容器数量
docker --help		# 帮助命令

可以通过docker的帮助文档查看:https://docs.docker.com/reference/

5.2 常用镜像命令

  1. docker images 查看本地主机上的所有镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB
centos        latest    5d0da3dc9764   5 months ago   231MB

# 字段解释:
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID 	镜像的ID
CREATED		镜像创建的时间
SIZE		镜像的大小
# 通过docker images --help 可以查看该命令的详细使用
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             # 显示所有镜像
  -f, --filter filter   # 通过条件进行过滤显示
  -q, --quiet           # 只显示镜像的ID
  1. docker search 镜像名 搜索镜像
# docker search 镜像名
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   # 根据条件来筛选
  --filter=STARS=500   # 按照STARS来筛选,筛选出数量在500之上的,这里并不是找出STARS等于500的

Docker 在线文档协作 docker官方文档_运维_10

Docker 在线文档协作 docker官方文档_运维_11

  1. docker pull 镜像名 下载镜像
# docker pull 镜像名		--下载镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull mysql			# 下载mysql
Using default tag: latest									# 如果命令中不写tag值,默认下载最新版本latest
latest: Pulling from library/mysql							# docker images的核心:分层下载
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest								#真实地址

# 下载指定版本:(前提是 指定的版本必须先存在于docker中)
docker pull mysql:5.7
由于docker images有分层下载,上面已经下载过mysql的最新版本,此处下载5.7版本的时候,由于有和最新版本公用的地方,在这次下载中直接显示为Already exists。5.7所独有的东西会被下载。

Docker 在线文档协作 docker官方文档_运维_12

  1. docker rmi 镜像删除
docker rmi		# rm 删除 i镜像(image)
docker rmi -f 条件	# 根据条件进行删除

Docker 在线文档协作 docker官方文档_容器_13

# 批量删除
docker rmi -f 容器id				    # 删除指定id的镜像
docker rmi -f 容器id 容器id 容器id  	 # 删除多个镜像
docker rmi -f $(docker images -aq)   # 删除全部的镜像
# $(docker images -aq)表示显示所有的image的ID,并作为参数,传递给 -f

5.3 常用容器命令

说明:有了镜像之后才能创建容器,下载一个centos镜像来进行学习

  1. 下载centos镜像
docker pull centos
  1. 启动/退出 镜像
# 启动:
docker run [可选参数] 镜像名字
#参数说明
--name="Name"		#容器名字 用来区分容器
-d					# 后台方式运行
-it					# 使用交互方式运行,进入容器查看内容
-p					# 指定容器的端口 -p8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口 (常用)
	-p 容器端口
		
# 启动并进入容器内部
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -it centos /bin/bash
[root@208950ad49e7 /]# ls 查看容器内的centos,基础版本很多命令都是不完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退回主机
[root@208950ad49e7 /]# exit 	退出镜像服务器
  1. 列出所有运行的容器
#docker ps
docker ps   # 当前正在运行的容器
-a 			# 列出在当前正在运行的容器,+历史运行过的容器
-n=2		#显示最近创建的2个容器(最近的)
-q			#只显示容器的编号
  1. 退出容器的两种方法
exit		# 容器停止并退出
ctrl+p+q	# 容器不停止,退出

Docker 在线文档协作 docker官方文档_运维_14

  1. 删除容器
docker rm 容器id 					# 删除指定id的容器(正在运行的容器删除不了)
docker rm -f 					 # 可以强制性删除正在运行的容器
docker rm -f $(docker ps -aq)	 # 删除全部容器
docker ps -a -q|xrags docker rm		#先查询出所有的容器id,用管道符传递给|后面的语句,进行全部删除
  1. 启动和停止容器的操作
docker start 容器id		#启动容器
docker restart 容器id		# 重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

Docker 在线文档协作 docker官方文档_Docker_15

5.4 常用的其他命令:

  1. 查看日志命令
docker logs

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         #显示日志
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     # 显示时间戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

# docker logs 
-tf			#显示日志
--tail 10	#显示10条日志
  1. 查看容器中进程信息
# docker top 容器id
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker top 6289e8425a39
UID	      PID        PPID       C        STIME       TTY         TIME            CMD
root      29143      29125      0        22:37       pts/0       00:00:00      /bin/bash
  1. 查看镜像的元数据
# docker inspect 容器id
  1. 进入当前正在运行我的容器

通常,容器是使用后台方式运行的,需要进入容器,修改一些配置

# 方式1

docker exet -it 容器id

Docker 在线文档协作 docker官方文档_运维_16

# 方式2
docker attach 容器id

Docker 在线文档协作 docker官方文档_Docker 在线文档协作_17

区别:

# docker exec	      进入容器后没开启一个新的终端,可以在里面操作,是常用的进入命令
# docker attach       进入容器正在执行我的终端,不会启动新的进程
  1. 从容器内拷贝文件到主机上
# 命令
docker cp 容器id:容器内文件路径 目的路径

Docker 在线文档协作 docker官方文档_Docker_18

6、练习

6.1 nginx 部署

  1. 搜素镜像
# docker search nginx
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        16754     [OK]       
linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   165                  
bitnami/nginx                                     Bitnami nginx Docker Image                      125                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   48                   
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   18                   [OK]
rancher/nginx-ingress-controller                                                                  10
  1. 拉取下载镜像
# docker pull nginx  下载最新版本
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
  1. 查询本地下载的镜像
# docker images
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   4 months ago   141MB
centos       latest    5d0da3dc9764   7 months ago   231MB
  1. 运行镜像
# docker run -d --name 别名 -p 主机端口:容器端口 镜像名字
# -d 					  # 后台运行
# -- name       		  # 起名字
# -p 主机端口:容器端口		# 端口映射

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d --name nginx01 -p 3344:80 nginx
d1e7b7a311bb2f8cd2033b1329178882c453b1ab308afa577c50e21d99fce745
  1. 端口映射(暴露)的概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDuPFkdt-1652287080146)(E:\02-学习笔记\笔记图片\docker\docker概念介绍\8.3 端口暴露.png)]

Docker 在线文档协作 docker官方文档_Docker 在线文档协作_19

  1. 查看运行的镜像
# docker ps 
# docker ps -a  # 所有运行的镜像,包括历史运行的

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
d1e7b7a311bb   nginx     "/docker-entrypoint.…"   18 seconds ago   Up 17 seconds   0.0.0.0:3344->80/tcp   nginx01
  1. 本地查看运行
# curl localhost:3344  可以通过本地查看运行状态、
# 通过公网查看: 虚拟机ip:映射端口
# 当访问出现错误时,需要登录阿里服务器控制台,添加334的安全组

[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]#

配置阿里云安全组,通过公网访问的结果:

Docker 在线文档协作 docker官方文档_运维_20

访问路径为:http://服务器的ip地址:暴露的端口,便能够成功访问到nginx。

  1. 配置文件
# 进入容器,进行自定义配置文件
# docker exec -it 给容器起的别名 /bin/bash 进入容器后台
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it nginx01 /bin/bash
# 查看 nginx 所在的目录
root@d1e7b7a311bb:/# whereis nginx 
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 进入nginx所在的目录
root@d1e7b7a311bb:/# cd /etc/nginx
# 查看目录中文件列表
root@d1e7b7a311bb:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params

至此,nginx部署完成 !

6.2 tomcat部署

  1. 使用docker run命令下载

docker run 时会自动帮助下载 无需通过search进行搜索 再pull

  1. 官方使用:
docker run -it --rm tomcat:9.0
之前启动都是后台启动,停止之后,容器还是可以查到,--rm一般用来测试,用完就删除
使用docker ps -a查看记录 没有找到启动tomcat的记录

# 前期学习不建议这么做,还是老老实实的通过pull来进行下载吧
  1. 下载并运行tomcat镜像
# 1、docker pull tomcat		# 下载tomcat镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
0e29546d541c: Already exists 
9b829c73b52b: Already exists 
cb5b7ae36172: Already exists 
6494e4811622: Already exists 
668f6fcc5fa5: Already exists 
dc120c3e0290: Already exists 
8f7c0eebb7b1: Already exists 
77b694f83996: Already exists 
0f611256ec3a: Already exists 
4f25def12f23: Already exists 
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

# 2、docker images   查看本地所有镜像
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
nginx                 latest    605c77e624dd   4 months ago    141MB
tomcat                latest    fb5657adc892   4 months ago    680MB
hello-world           latest    feb5d9fea6a5   7 months ago    13.3kB
centos                latest    5d0da3dc9764   7 months ago    231MB

# 3、docker run -d -p 3355:8080 --name tomcat01 tomcat 运行
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
3e7fc95c278a15b8dbe8e0773089cbe6ede11da07ccb7b4d3718e73de7146a57


# 进入tomcat01中:
docker exec -it tomcat01 /bin/bash/
# 进入之后发现,在外部访问:http://39.107.241.179:3355,显示404错误,表示没有加载到资源
# 进入tomcat01中,发现webapps目录为空,webapps.dist文件夹中包括访问所需内容,
# 在tomcat01中,将webapps.dist中的内容拷贝到webapps中:
cp -r webapps.dist/* webapps

随后刷新之后,便可通过外部访问tomcat界面
  1. 阿里云设置安全组 3355,通过外部公网访问,发现404错误 :

Docker 在线文档协作 docker官方文档_docker_21

导航栏中已经显示出tomact的图标,但是界面出现404,证明目前通过公共外网是可以访问到tomcat的,只是没有加载到资源,进入镜像容器内查看tomcat配置文件

  1. 进入容器内部
# docker exec -it tomcat01 /bin/bash
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# docker exec -it tomcat01 /bin/bash
root@3e7fc95c278a:/usr/local/tomcat# ls		#查看容器中的文件
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@3e7fc95c278a:/usr/local/tomcat# cd webapps			# 进入webapps目录,ls查看列表,发现目录中没有文件,是空的
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
root@3e7fc95c278a:/usr/local/tomcat/webapps# cd ..		# 返回上一级
root@3e7fc95c278a:/usr/local/tomcat# cd webapps.dist	# 查看webapps.dist发现该目录中存放着tomcat的相关文件
root@3e7fc95c278a:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager

通过进入容器内部,发现容器中的文件少了,是因为:阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。

将webapps.dist目录下的文件拷贝到webapps目录中

# 将webapps.dist目录下的所有内容,拷贝到webapps中
root@3e7fc95c278a:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@3e7fc95c278a:/usr/local/tomcat# cd webapps
root@3e7fc95c278a:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@3e7fc95c278a:/usr/local/tomcat/webapps#

刷新公网的访问路径,之后,显示可以成功访问:

Docker 在线文档协作 docker官方文档_运维_22

  1. 内部通过curl访问:
[root@iZ2ze1dg1xkfc3i15ybixmZ ~]# curl localhost:3355
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.0.14</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
                <span id="nav-examples"><a href="/examples/">Examples</a></span>
                <span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
                <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
                <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
                <br class="separator" />
            </div>
            <div id="asf-box">
                <h1>Apache Tomcat/10.0.14</h1>
            </div> 
            <p class="copyright">Copyright ©1999-2022 Apache Software Foundation.  All Rights Reserved</p>
        </div>
    </body>
</html>

至此,tomcat 部署完成!

6.3、ElasticSearch部署

  1. 安装运行命令
docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. 内存占用率很高,修改页面配置

ES所占用的内存很高,由于学习所用服务器为1核2G的,ES在启动之后内存占用率太高,会导致虚拟机很卡顿,可以stop之后,

在docker run时,添加 **-e ES_JAVA_OPTS=“-Xms64m -Xmx512m”**修改页面配置参数,类似于在IDEA的配置文件中修改,

Xms:最小占用64m,Xmx最大占512m

docker run -d --name elasticsearch02 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.0
  1. 查看资源占用情况
docker stats

6.4、问题思考

  • 在进行nginx配置时,每次改动nginx的配置文件,都需要通过虚拟机进入到容器内部进行操作,这无疑十分麻烦。
  • 同样的,在部署tomcat时,还需要去webapps.dist目录拷贝内容到webapps,每次进入容器也比较繁琐。
  • 上述两个问题,如果能在容器外部提供一个映射路径供我们直接访问,修改岂不美哉!

这一问题,通过后面学习docker容器数据卷技术,会得到一个很好的解决。

快速入门篇内容到此结束,多思考、多练习,掌握基本命令