Docker基础01--入门总结--(狂神说docker学习笔记)
文章目录学习目录学习笔记1.Docker概述Docker为什么出现?2.Docker的历史聊聊Docker3.Docker的作用应用更快速的交付和部署更便捷的升级和扩缩容更简单的系统运维更高效的计算资源利用4.Docker的基本组成镜像(image):容器(container):仓库(repository):5.Dockers的安装6.Docker的卸载7.配置阿里云镜像加速8. 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给以上的问题,提出了解决方案!
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语言开发的!开源项目!
3.Docker的作用
之前的虚拟机技术
虚拟机技术缺点:
1.资源占用很多
2.冗余步骤多
3.启动很慢!
容器化技术
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机技术的不同:
-
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
-
容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以轻便了
-
每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像、发布测试、一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
(SpringBoot 1.5 Redis 5 tomcat8)打包成一个镜像,扩展 服务器A!服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更高效的计算资源利用
Docker是 内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致!
4.Docker的基本组成
Docker的基本组成图如下:
说明:
镜像(image):
docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run==》tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):
Docker利用容器技术没独立运行一个或者一个组应用,通过镜像来创建的。
启动、停止、删除,基本命令
仓库(repository):
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
结果:
下载hello-world镜像进行测试
查看下载的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)进入阿里云官网,搜索容器镜像服务
(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的守护进程运行在主机上,通过Socker从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
Docker为什么比VM Ware快?
1、Docker比虚拟机更少的抽象层
2、docker利用宿主机的内核,VM需要的是Guest OS
Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:
注:现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 卷的技术,可以实现,自动同步
命令小节的图解如下:
可以把常用命令放进来
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
端口暴露的概念:
外网\
思考问题:我们每次改动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>
11.2 Tomcat部署
# 官网的使用 用完即删
docker run -it --rm tomcat:9.0
(1)下载并运行
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
(2)访问测试
没有问题
(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
思考问题:我们以后都要部署项目,如果每次都要进入而哦那个其是不是十分麻烦?我要是可以在容器外部提供一个映射路径,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 查看资源占用情况
作业:使用kibanna连接es?思考网络如何才能来连接过去。
- 图形化管理工具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如何查看端口占用情况
更多推荐
所有评论(0)