Docker基础01--入门总结--(狂神说docker学习笔记)

Docker学习笔记合集(持续更新)

linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)

Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)

学习目录

Docker概述
Docker安装
Docker命令–镜像命令 容器命令 操作命令
Docker镜像!
容器数据卷!
DockerFile
Docker网络原理
IDEA整合Docker
Docker Compose
Docker Swarm
CI\CD Jenkins

1.Docker概述

Docker为什么出现?

一款产品:开发–上线 两套环境!应用环境,应用配置!

开发 — 运维 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就非常大!

环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…)

发布一个项目(jar+(Redis、MySQL、jdk、ES))项目能不能都带上环境安装打包!

之前在服务器配置一个应用的环境 Redis、MySQL、jdk、ES、Hadoop,配置越麻烦了,不能够跨平台

windows,最后发布到linux!

传统:开发jar,运维来做

现在:开发打包部署上线,一套流程做完

java - apk --发布(应用商店 ) --张三使用apk --安装即可用!

java - jar(环境) —打包项目带上环境(镜像) --(Docker仓库:商店) —下载我们发布的镜像 --直接运行即可!

Docker给以上的问题,提出了解决方案!

img

Docker的思想就来自于集装箱!

JRE — 多个应用(端口冲突)—原来都是交叉的!

隔离:Docker核心思想!打包装箱!每个箱子之间是互相隔离的。

水果、生化武器

Docker通过隔离机制,可以将服务器利用到机制!

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!

2.Docker的历史

2010年,几个搞IT的年轻人,在美国成立了一家公司 dotCloud

做一些pass的云计算服务!LXC有关的容器技术!

他们将自己的技术(容器化技术)命名 就是 Docker!

Docker刚刚诞生的时候,没有引起行业的注意!

2013年开源–开发源代码!

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

Docker为什么这么火?十分的轻巧!

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或多台电脑!笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

vm,linux centos原生镜像(一个电脑!) 隔离,需要开启多个虚拟机! 几个G  几分钟
docker,隔离,镜像(最核心的环境 4m  + jdk +mysql)十分小巧,运行镜像即可! 几个M KB 秒级

到现在,所有开发人员都必须要回Docker!

聊聊Docker

Docker是基于Go语言开发的!开源项目!

img

3.Docker的作用

之前的虚拟机技术

img

虚拟机技术缺点:

1.资源占用很多

2.冗余步骤多

3.启动很慢!

容器化技术

容器化技术不是模拟的一个完整的操作系统

img

比较Docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以轻便了

  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像、发布测试、一键运行

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!

(SpringBoot 1.5 Redis 5 tomcat8)打包成一个镜像,扩展 服务器A!服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker是 内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致!

4.Docker的基本组成

Docker的基本组成图如下:

img

说明:

镜像(image):

docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run==》tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术没独立运行一个或者一个组应用,通过镜像来创建的。

启动、停止、删除,基本命令

仓库(repository):

img

5.Dockers的安装

查看系统的内核:

uname -r

系统内核版本为3.10.0

[root@zecan ~]# uname -r
3.10.0-1062.18.1.el7.x86_64

查看系统配置

cat /etc/os-release

[root@zecan ~]# 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

结果:

img

下载hello-world镜像进行测试

img

查看下载的hello world镜像

[root@zecan ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB

6.Docker的卸载

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

7.配置阿里云镜像加速

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

img

9. 底层原理

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

img

Docker为什么比VM Ware快?

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

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

img

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

img

注:现GuestOS已全部适用

[

](https://blog.csdn.net/huangjhai/article/details/118854733)

10. Docker的常用命令

10.1 基础命令

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

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

10.2 镜像命令

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

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
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 ~]# docker search mysql
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
      
      
#搜索收藏数大于3000的镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
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 ~]# 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@zecan ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
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 容器命令

说明:有了镜像才可以创建容器

docker pull centos

新建容器并启动

docker run [可选参数] image

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

#测试,并启动
[root@zecan ~]# docker run -it centos /bin/bash
[root@b3ac7a30eb8a /]# ls   #查看容器内地centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器退回主机
[root@b3ac7a30eb8a /]# exit
exit
[root@zecan /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  patch  proc  root  run  sbin  srv  sys  tmp  usr  var  www

列出所有的运行的容器

# docker ps 命令
		# 列出当前正在运行的容器
-a  # 列出当前正在运行的容器+带出历史运行过的容器
-n=# 显示最近创建的容器
-q # 只显示容器的编号

[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zecan /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
b3ac7a30eb8a   centos        "/bin/bash"   5 minutes ago    Exited (0) 4 minutes ago              optimistic_heyrovsky
332d452d5337   hello-world   "/hello"      31 minutes ago   Exited (0) 31 minutes ago             sleepy_mendel
72d42c07133b   hello-world   "/hello"      15 hours ago     Exited (0) 15 hours ago               pensive_germain
[root@zecan /]# 

删除容器

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 其他常用命令

后台启动容器

#命令 docker run -d 镜像名!
[root@zecan /]# docker run -d centos

#问题docker ps,发现centos停止了

#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

1.查看日志

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

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 #num为要显示的日志条数


#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
#编写shell脚本循环执行,使得centos容器保持运行状态
[root@zecan /]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
88947e8d3cf0fa5bdbd6e0577e77b74b8a53bf4dd6685bd00130829a8c7f2250
[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
88947e8d3cf0   centos    "/bin/sh -c 'while t…"   40 seconds ago   Up 39 seconds             loving_tesla
[root@zecan /]# docker logs -tf --tail 10 88947e8d3cf0
2021-11-16T02:39:04.210788277Z hi
2021-11-16T02:39:09.212892789Z hi
2021-11-16T02:39:14.214927123Z hi
2021-11-16T02:39:19.217185096Z hi
2021-11-16T02:39:24.219168601Z hi
2021-11-16T02:39:29.221417267Z hi
2021-11-16T02:39:34.223160841Z hi
2021-11-16T02:39:39.225251841Z hi
2021-11-16T02:39:44.227213547Z hi
2021-11-16T02:39:49.229377746Z hi
2021-11-16T02:39:54.231320967Z hi

2.查看容器中进程信息

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
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

3.查看容器的元数据

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id

4.进入当前正在运行的容器

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

方式一:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c703b5b1911f /]# ps -ef      
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 attach c703b5b1911f

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

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

拷贝容器的文件到主机中

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

#启动容器
[root@zecan /]# docker run -it centos /bin/bash
[root@a84d4273434f /]# 
[root@a84d4273434f /]# [root@zecan /]# 
[root@zecan /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
a84d4273434f   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             great_sammet

#进入dockers容器内部
[root@zecan /]# docker attach a84d4273434f
[root@a84d4273434f /]# cd  /home
[root@a84d4273434f home]# touch zecan.txt
[root@a84d4273434f home]# ls
zecan.txt
[root@a84d4273434f home]# exit
exit
[root@zecan /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
a84d4273434f   centos    "/bin/bash"   3 minutes ago   Exited (0) 12 seconds ago             great_sammet

# 将文件拷贝出来到主机上
[root@zecan /]# docker cp a84d4273434f:/home/zecan.txt /home
[root@zecan /]# cd /home
[root@zecan home]# ls
redis  www  zecan.txt

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

命令小节的图解如下:

img

可以把常用命令放进来

11. 常用容器部署

11.1 Nginx部署

(1)搜索并下载镜像

[root@zecan home]# docker search nginx
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@zecan home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
7d63c13d9b9b: Pull complete 
15641ef07d80: Pull complete 
392f7fc44052: Pull complete 
8765c7b04ad8: Pull complete 
8ddffa52b5c7: Pull complete 
353f1054328a: Pull complete 
Digest: sha256:dfef797ddddfc01645503cef9036369f03ae920cac82d344d58b637ee861fda1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@zecan home]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    04661cdce581   6 days ago     141MB
mysql         latest    ecac195d15af   4 weeks ago    516MB
hello-world   latest    feb5d9fea6a5   7 weeks ago    13.3kB
centos        latest    5d0da3dc9764   2 months ago   231MB

可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx

(2)运行测试

-d 后台运行
--name 给容器命名
-p 3344:80 将宿主机的端口3344映射到该容器的80端口 

[root@zecan home]# docker run -d --name nginx01 -p 3344:80 nginx 
b4ce6a638ddcf76ad1eb85fe9735a39174860e984bc4cea94beb0dd9ac614d47
[root@zecan home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
b4ce6a638ddc   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:3344->80/tcp   nginx01

端口暴露的概念:

img

外网\

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改? - v 数据卷技术!

(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-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf

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

[root@zecan home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</ti 
<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>

img

11.2 Tomcat部署

# 官网的使用  用完即删
docker run -it  --rm  tomcat:9.0

(1)下载并运行

docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat

(2)访问测试

没有问题

img

(3)进入容器

docker exec -it tomcat01 /bin/bash

1.容器中的命令是少了

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

[root@zecan home]# docker exec -it tomcat01 /bin/bash
root@7115b1d34558:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
root@7115b1d34558:/usr/local/tomcat/webapps# cd..
bash: cd..: command not found
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cd webapps.dist
root@7115b1d34558:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cp -r webapps.dist/*  webapps
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

img

思考问题:我们以后都要部署项目,如果每次都要进入而哦那个其是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,在外部放置项目,就自动同步到内部就好了!

11.3 ElasticSearch部署

  • es 暴露的端口很多!

  • es 十分的耗内存

  • es 的数据一般需要放置到安全目录!挂载

# 启动 
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 启动了 linux就卡死了 docker  stats 查看 cpu的状态

# es是十分耗内存的,1.xG 1核2G

# 测试一下es是否成功
[root@zecan ~]# curl localhost:9200
{
  "name" : "ebccbbe4becc",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "voYT7LkXQhqtoz8PcDmUbg",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

# 增加内存的限制

#x修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m"  elasticsearch:7.6.2

添加 ’-e ES_JAVA_OPTS="-Xms128m -Xmx512m" ‘ 配置ElasticSearch的虚拟机占用的内存大小。
docker stats 查看资源占用情况

img

作业:使用kibanna连接es?思考网络如何才能来连接过去。

img

  1. 图形化管理工具Portaniner安装
    Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(学到CI/CD再用)
    下载运行Portaniner镜像并运行,设置本机映射端口为8088
    docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    -v 挂载

访问测试:外网(阿里云开通外网)
安装教程:https://blog.csdn.net/weixin_44421461/article/details/109475411
第一次登录设置admin用户的密码

我们建造的是单机版,直接选择Local,点击连接
如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:

12.Docker镜像详解

12.1 什么是镜像

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

所有的应用,直接打包docker镜像,就可以直接跑起来
镜像来源有三:
● 仓库下载
● 拷贝
● 自己创造镜像

12.2 Docker镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。

12.3 分层理解

查看镜像分层的方式可以通过docker image inspect+镜像 命令!

"RootFS": {
"Type": "layers",
"Layers": [
"sha256:e8b689711f21f9301c40bf2131ce1a1905c3aa09def1de5ec43cf0adf652576e",
"sha256:b43651130521eb89ffc3234909373dc42557557b3a6609b9fed183abaa0c4085",
"sha256:8b9770153666c1eef1bc685abfc407242d31e34f180ad0e36aff1a7feaeb3d9c",
"sha256:6b01cc47a390133785a4dd0d161de0cb333fe72e541d1618829353410c4facef",
"sha256:0bd13b42de4de0a0d0cc3f1f162cd0d4b8cb4ee20cbea7302164fdc6894955fd",
"sha256:146262eb38412d6eb44be1710bfe0f05d3493831f82b1c2be8dc8d9558c9f033"
]

12.4 提交镜像

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

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

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

[root@zecan  ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                    NAMES
0f8ea2f53e32   tomcat    "catalina.sh run"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp   sharp_diffie
[root@zecan  ~]# docker exec -it 0f8ea2f53e32 /bin/bash 
root@0f8ea2f53e32:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@0f8ea2f53e32:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@0f8ea2f53e32:/usr/local/tomcat# cd webapps
root@0f8ea2f53e32:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@0f8ea2f53e32:/usr/local/tomcat/webapps#

#2.提交镜像作为一个新的镜像

[root@zecan  ~]# docker commit -a="zecan" -m="add webapps app" 0f8ea2f53e32 tomcat02:1.0 
sha256:ad1fdd24828b785a5d4abcb980d19178e1c30123b4ce588c4225a0fbfaf4ad40
[root@zecan  ~]# docker images 
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
tomcat02              1.0       ad1fdd24828b   15 seconds ago   684MB
tomcat                latest    5db6fed793e9   12 hours ago     680MB
nginx                 latest    04661cdce581   6 days ago       141MB
mysql                 latest    ecac195d15af   4 weeks ago      516MB
redis                 latest    7faaec683238   4 weeks ago      113MB
hello-world           latest    feb5d9fea6a5   7 weeks ago      13.3kB
centos                latest    5d0da3dc9764   2 months ago     231MB
portainer/portainer   latest    580c0e4e98b0   8 months ago     79.1MB
elasticsearch         7.6.2     f29a1ee41030   20 months ago    791MB

#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
ROOT  docs  examples  host-manager  manager
wz99sm8v95sckz8bd2c4Z ~]# docker images
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

学习过程搜索:
docker run容器的时候/bin/bash到底在表达什么
Linux下“/”和“~”的区别
端口冲突(Address already in use)解决方法
linux如何查看端口占用情况

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是我,Zack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值