docker学习笔记

前言

1. Docker概述


docker为什么出现?
一款产品:开发–上线 两套环境!应用环境,应用配置!

  • 开发…运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?
  • 环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、.ES、Hadoop.…)! 费时费力

(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.每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。

容器化带来的好处:
在这里插入图片描述

3. Docker的基本组成


Docker的基本组成图如下:

在这里插入图片描述
说明:

4. Docker的安装

4.1 ubuntu20.04安装docker

1. 添加docker源
#ubuntu20.04安装
#安装相关工具
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
#添加阿里云的docker GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#添加阿里镜像源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#更新
sudo apt-get update
2. 查看可用的docker版本
#查看有哪些版本
apt-cache madison docker-ce
3. 安装最新版/指定版本
#安装最新版
sudo apt-get install -y docker-ce
#安装5:19.03.6~3-0~ubuntu-bionic版
#sudo apt-get install -y docker-ce=5:19.03.6~3-0~ubuntu-bionic
#安装5:20.10.17~3-0~ubuntu-focal版
#sudo apt-get install -y docker-ce=5:20.10.17~3-0~ubuntu-focal
#重启docker
sudo systemctl restart docker
4.配置镜像加速

4.1 首先获取镜像加速地址:
1)登录阿里云控制台,选取“容器镜像服务”产品
2)镜像工具 -> 镜像加速器
4.2 配置/etc/docker/daemon.json文件,添加镜像加速链接

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://upon7e7s.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4.2 win10设置docker

1. 修改存储位置

win10修改docker镜像的存储位置

  1. 停止wsl
wsl --shutdown
  1. 转移docker-desktop-data存储位置
  • 导出docker-desktop-data.tar 到指定位置,如图所示:
wsl --export docker-desktop-data D:\Work\docker\docker-desktop-data.tar 

在这里插入图片描述

  • 然后再注销原来使用的存储镜像
wsl --unregister docker-desktop-data
  • 再把导出的镜像导入到你要转移的目标位置用于存储镜像的目录 D:\Work\docker\image
wsl --import docker-desktop-data D:\Work\docker\image D:\Work\docker\docker-desktop-data.tar --version 2

在这里插入图片描述

  1. 转移docker-desktop的存储位置,和上一步类似,运行docker主程序目录 D:\Work\docker\bin,三条命令的效果图如下所示:
wsl --export docker-desktop D:\Work\docker\docker-desktop.tar
wsl --unregister docker-desktop
wsl --import docker-desktop D:\Work\docker\bin D:\Work\docker\docker-desktop.tar --version 2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 设置docker加速镜像

参考:Docker 简介和安装
在这里插入图片描述

  • 重启之后,此处的框就变成了如下的效果:
{
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://upon7e7s.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
  • 其实就是修改了~/.docker/daemon.json配置文件在这里插入图片描述

4.3 centos安装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 ~]
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  
    
    
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

结果:
在这里插入图片描述

下载hello-world镜像进行测试
在这里插入图片描述
查看下载的hello world镜像

[root@iZwz99sm8v95sckz8bd2c4Z lib]
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

5. Docker的卸载



yum remove docker-ce docker-ce-cli containerd.io

rm -rf /var/lib/docker

6. 配置阿里云镜像加速


(1)进入阿里云官网,搜索容器镜像服务
在这里插入图片描述
(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的运行流程如下图:
在这里插入图片描述

9. 底层原理


Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
在这里插入图片描述

Docker为什么比VM Ware快?

1、Docker比虚拟机更少的抽象层

2、docker利用宿主机的内核,VM需要的是Guest OS

在这里插入图片描述
Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:
在这里插入图片描述

10. Docker常用命令


10.1 基础命令

docker version          
docker info             
docker 命令 --help       
docker COMMAND --help

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

10.2 镜像命令

1.docker images 查看本地主机的所有镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB


1.REPOSITORY  镜像的仓库源

2.TAG  镜像的标签

3.IMAGE ID 镜像的id

4.CREATED 镜像的创建时间

5.SIZE 镜像的大小




-a/--all 列出所有镜像

-q/--quiet 只显示镜像的id

2.docker search 搜索镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10308     [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3819      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   517       [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]




Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
      

[root@iZwz99sm8v95sckz8bd2c4Z ~]
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10308     [OK]
mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]

3.docker pull 镜像名[:tag] 下载镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]
Using default tag: latest            
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete          
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  

指定版本下载

[root@iZwz99sm8v95sckz8bd2c4Z ~]
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 删除镜像


[root@iZwz99sm8v95sckz8bd2c4Z ~]

[root@iZwz99sm8v95sckz8bd2c4Z ~]

[root@iZwz99sm8v95sckz8bd2c4Z ~]

10.3 容器命令

如拉取一个centos镜像

docker pull centos

运行容器的命令说明:

docker run [可选参数] image


--name="名字"           指定容器名字
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
(
-p ip:主机端口:容器端口  配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P                     随机指定端口(大写的P)

运行并进入容器centos

[root@iZwz99sm8v95sckz8bd2c4Z ~]
[root@bd1b8900c547 /]
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

退出容器命令:



[root@bd1b8900c547 /]
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]

列出运行过的容器命令:


     
-a   
-n=? 
-q   


[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago             optimistic_shtern
bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             cool_tesla
cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               optimistic_darwin

删除容器命令:

docker rm 容器id                 
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 其他常用命令

10.4 1 日志的查看
[root@iZwz99sm8v95sckz8bd2c4Z ~]

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --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     Show 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 容器id
docker logs --tail number 容器id 




[root@iZwz99sm8v95sckz8bd2c4Z ~]
c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c703b5b1911f   centos    "/bin/sh -c 'while t…"   13 seconds ago   Up 10 seconds             pedantic_banach
[root@iZwz99sm8v95sckz8bd2c4Z ~]
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

10.4 2 查看容器中进程信息
[root@iZwz99sm8v95sckz8bd2c4Z ~]
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11156               11135               0                   11:31               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 5;done
root                11886               11156               0                   11:43               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

10.4.3 查看容器的元数据
[root@iZwz99sm8v95sckz8bd2c4Z ~]

10.4.4 进入当前正在运行的容器

因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

方式一:

[root@iZwz99sm8v95sckz8bd2c4Z ~]
[root@c703b5b1911f /]
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c703b5b1911f /]
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root       316   279  0 03:56 pts/0    00:00:00 ps -ef

方式二:

[root@iZwz99sm8v95sckz8bd2c4Z ~]

docker exec 进入容器后开启一个新的终端,可以在里面操作

docker attach 进入容器正在执行的终端,不会启动新的进程

10.4.5 拷贝操作

拷贝操作的命令如下:


docker cp 容器id:容器内路径  目的主机路径


docker cp 目的主机路径 容器id:容器内路径

[root@iZwz99sm8v95sckz8bd2c4Z ~]
[root@c703b5b1911f /]
[root@c703b5b1911f home]

[root@c703b5b1911f home]
[root@c703b5b1911f home]
test.java
[root@c703b5b1911f home]
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c703b5b1911f centos “/bin/sh -c 'while t…” 35 minutes ago Up 35 minutes pedantic_banach
[root@iZwz99sm8v95sckz8bd2c4Z ~]
[root@iZwz99sm8v95sckz8bd2c4Z ~]
hai pan test.java


命令小节的图解如下:  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210717134852290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)

11\. 图形化管理工具Portaniner安装
------------------------

Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(CI/CD再用)

下载运行Portaniner镜像并运行,设置本机映射端口为8088

[root@localhost conf]
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 ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7789d4505a00 portainer/portainer “/portainer” 6 seconds ago Up 5 seconds 0.0.0.0:8088->9000/tcp quirky_sinoussi


第一次登录设置admin用户的密码  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718000547236.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)

如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718000659945.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)

12\. Docker镜像详解
---------------

### 12.1 什么是镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。

### 12.2 Docker镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718123220152.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718123416610.png)

### 12.3 分层理解

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718123512798.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)

[root@iZwz99sm8v95sckz8bd2c4Z ~]
[
{
“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 docker-maint@nginx.com
},
“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 docker-maint@nginx.com
},
“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"
        ]
    },

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718123636415.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)  
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071812372978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)  
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071812374035.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)

### 12.4 提交镜像

使用docker commit 命令提交容器成为一个新的版本

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


由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:

[root@iZwz99sm8v95sckz8bd2c4Z ~]
root@2a3bf3eaa2e4:/usr/local/tomcat
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps
root@2a3bf3eaa2e4:/usr/local/tomcat
root@2a3bf3eaa2e4:/usr/local/tomcat
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps
ROOT docs examples host-manager manager
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a3bf3eaa2e4 tomcat “/bin/bash” 4 minutes ago Up 4 minutes 8080/tcp competent_torvalds
7789d4505a00 portainer/portainer “/portainer” 24 hours ago Up 24 hours 0.0.0.0:8088->9000/tcp quirky_sinoussi
[root@iZwz99sm8v95sckz8bd2c4Z ~]
root@2a3bf3eaa2e4:/usr/local/tomcat
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps
ROOT docs examples host-manager manager
root@2a3bf3eaa2e4:/usr/local/tomcat/webapps
root@2a3bf3eaa2e4:/usr/local/tomcat
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a3bf3eaa2e4 tomcat “/bin/bash” 8 minutes ago Up 8 minutes 8080/tcp competent_torvalds
7789d4505a00 portainer/portainer “/portainer” 24 hours ago Up 24 hours 0.0.0.0:8088->9000/tcp quirky_sinoussi

[root@iZwz99sm8v95sckz8bd2c4Z ~]
sha256:f189aac861de51087af5bc88a5f1de02d9574e7ee2d163c647dd7503a2d3982b
[root@iZwz99sm8v95sckz8bd2c4Z ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 f189aac861de 7 seconds ago 653MB
mysql 5.7 f07dfa83b528 6 days ago 448MB
tomcat latest feba8d001e3f 10 days ago 649MB
nginx latest ae2feff98a0c 12 days ago 133MB
centos latest 300e315adb2f 2 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 9 months ago 791MB

[root@iZwz99sm8v95sckz8bd2c4Z ~]
root@1645774d4605:/usr/local/tomcat
root@1645774d4605:/usr/local/tomcat/webapps
ROOT docs examples host-manager manager
wz99sm8v95sckz8bd2c4Z ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 f189aac861de 7 seconds ago 653MB
mysql 5.7 f07dfa83b528 6 days ago 448MB
tomcat latest feba8d001e3f 10 days ago 649MB
nginx latest ae2feff98a0c 12 days ago 133MB
centos latest 300e315adb2f 2 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 9 months ago 791MB


13\. 常用容器部署
-----------

### 13.1 Nginx部署

**(1)搜索并下载镜像**

[root@iZwz99sm8v95sckz8bd2c4Z ~]
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14207 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1932 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 797 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 137
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 123
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 107 [OK]
[root@iZwz99sm8v95sckz8bd2c4Z ~]
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 ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f07dfa83b528 5 days ago 448MB
nginx latest ae2feff98a0c 11 days ago 133MB
centos latest 300e315adb2f 2 weeks ago 209MB


可以到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 ~]
Error: No such container: nginx01
[root@iZwz99sm8v95sckz8bd2c4Z ~]
20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20c896637ff5 nginx “/docker-entrypoint.…” 7 seconds ago Up 5 seconds 0.0.0.0:3334->80/tcp nginx01


端口暴露的概念:  
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210718124656411.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namhhaQ==,size_16,color_FFFFFF,t_70)  
**(3)配置文件**  
进入容器,自定义配置文件

[root@iZwz99sm8v95sckz8bd2c4Z ~]
root@20c896637ff5:/
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20c896637ff5:/
root@20c896637ff5:/etc/nginx
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
root@20c896637ff5:/
root@20c896637ff5:/etc/nginx
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf


**(4)访问测试**  
本地主机访问测试,curl命令发起请求,如果使用阿里云服务器需要设置安全组。

[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20c896637ff5 nginx “/docker-entrypoint.…” 7 minutes ago Up 7 minutes 0.0.0.0:3334->80/tcp nginx01
[root@iZwz99sm8v95sckz8bd2c4Z ~]

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.


**(5)安装vim**  
我们使用Nginx往往需要编写配置文件,但是Nginx官方镜像没有安装vim,需要我们手动进行安装。使用以下命令进行安装:

apt-get install vim


如果执行上述命令出现提示:

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    E: Unable to locate package vim

则需要先同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。执行以下命令来更新:

apt-get update


更新完毕再安装即可。我们修改了配置文件,只要重新启动容器`docker restart 容器id`,改动就可以生效了。

解决vim在终端不能复制的问题:在vim 中输入 :set mouse=r。

拓展:启动项目并设置数据卷,为避免nginx因为修改配置文件导致的错误而无法启动容器,我们可以通过cp命令覆盖配置文件,但是设置数据卷会更为方便。启动Nginx容器的同时设置数据卷的命令:

docker run
–name my_nginx
-d -p 80:80
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /data/nginx/log:/var/log/nginx
-v /data/nginx/html:/usr/share/nginx/html
nginx


参数说明:

第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
第三个-v:挂载静态页面目录


### 13.2 Tomcat部署

**(1)下载并运行**

[root@iZwz99sm8v95sckz8bd2c4Z ~]
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 ~]
7136295a6082cb0f805b025a1471bde02ead4864be3e2c9dcd337b1dde0a3113


**(2)进入容器**

1.容器中的命令是少了

2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。

[root@iZwz99sm8v95sckz8bd2c4Z ~]
root@7136295a6082:/usr/local/tomcat
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@7136295a6082:/usr/local/tomcat
root@7136295a6082:/usr/local/tomcat/webapps.dist
ROOT docs examples host-manager manager
root@7136295a6082:/usr/local/tomcat/webapps.dist
root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT
RELEASE-NOTES.txt WEB-INF asf-logo-wide.svg bg-button.png bg-middle.png bg-nav.png bg-upper.png favicon.ico index.jsp tomcat.css tomcat.svg
root@7136295a6082:/usr/local/tomcat/webapps.dist/ROOT
root@7136295a6082:/usr/local/tomcat
root@7136295a6082:/usr/local/tomcat/webapps
root@7136295a6082:/usr/local/tomcat/webapps
root@7136295a6082:/usr/local/tomcat/webapps
ROOT docs examples host-manager manager
root@7136295a6082:/usr/local/tomcat/webapps
exit


**(3)访问测试**

[root@iZwz99sm8v95sckz8bd2c4Z ~]

Apache Tomcat/9.0.41
<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>

### 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 ~]
3b8cd4991814896c523ee67b84ce198e32bd82b1a62d512b198138a58ca946f1
[root@iZwz99sm8v95sckz8bd2c4Z ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b8cd4991814 elasticsearch:7.6.2 “/usr/local/bin/dock…” 10 seconds ago Up 6 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch01
[root@iZwz99sm8v95sckz8bd2c4Z ~]


### 13.4 MySQL部署

**(1)下载并运行**

docker run -d --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7


参数说明:

-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 默认账号root 用户的密码。


**(2)进入容器查看MySQL服务**  
进入容器,并通过账号root查看MySQL服务能否正常连接。

docker exec -it 9b3aad6819ff /bin/bash
mysql -h localhost -u root -p


![在这里插入图片描述](https://img-blog.csdnimg.cn/1063e7abc3b9453e8962e2c80de648d1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ29kZTBjZWFu,size_20,color_FFFFFF,t_70,g_se,x_16)

> Docker系列文章:  
> 1.[Docker快速入门总结笔记](https://blog.csdn.net/huangjhai/article/details/118854733)  
> 2.[Docker容器数据卷详解](https://blog.csdn.net/huangjhai/article/details/119860628)  
> 3.[Dockerfile详解与镜像发布](https://blog.csdn.net/huangjhai/article/details/120278039)  
> 4.[Docker网络详解与实战](https://blog.csdn.net/huangjhai/article/details/120425457)  
> 笔记总结:[https://www.bilibili.com/video/BV1og4y1q7M4](https://www.bilibili.com/video/BV1og4y1q7M4)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰之行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值