docker 学习笔记(一)
- 2022-10-19 天津
本文字数:12085 字
阅读完需:约 1 分钟
1.docker 概述
docker 为什么出现?一款产品:开发-----上线 两套环境!开发 ---- 运维。问题:在我的电脑可能运行!版本更新导致的问题!环境配置是十分的麻烦,每一个机器都要部署环境!发布一个项目(jar + (redis、mysql、jdk)),项目能不能带上环境安装打包!windows,最后发布到 Linux!传统:开发 jar,运维安装各种环境现在:开发打包部署上线,一套流程做完!
简单而说:Docker 就是要解决上面的问题?java --- apk ----发布(应用商店)-----张三使用 apk------安装即可!java --- jar(环境)----打包项目以及环境(镜像)-----(Docker 仓库)-----下载我们发布的镜像----直接运行即可!
历史?2010 年-------2013 年开源------2014docker1.0 发布
为什么这么火?比较轻巧,相比于虚拟机:在 windows 中装一个 vm,通过这个软件可以虚拟出一台或者多台电脑。
vm:linux centos 原生镜像(一个电脑!)隔离,需要开启多个虚拟机! 几个 G 几分钟
docker:隔离,镜像(最核心的环境 4m + jdk +mysql)十分的小巧,运行镜像就可以了!小巧! 几个 M KB 运行启动快!
2.docker 能干什么?
虚拟机技术(虚拟出一条硬件)缺点:1.资源占用十分多 2.冗余步骤多 3.启动很慢
Docker 优点:容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
3.docker 安装
基本组成
镜像(image):docker 镜像就好比一个模板,可以通过这个模板来创建服务,tomcat 镜像----->run---->tomcat01 实例(提供服务器)。通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):Docker 利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。启动,停止,删除,基本命令!目前可以理解为一个简易的 Linux 系统!
仓库(repository):仓库就是存放镜像的地方!仓库分为公有仓库和私有库!Docker Hub(默认是国外的)阿里云...都有容器服务器(配置镜像加速!)
安装 Docker:
系统内核 3.10 以上
uname -r
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc8376560dbb4df898dbb632c5f39e72~tplv-k3u1fbpfcp-zoom-1.image)
系统版本
cat /etc/os-release
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/401e8e2f666449e7abeb1f981da0db5d~tplv-k3u1fbpfcp-zoom-1.image)
#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 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#4.安装docker docker-ce社区版 ee是企业版
yum install docker-ce docker-ce-cli containerd.io
#5.启动docker
systemctl start docker
#6.验证docker
docker version
#7.hello-world
docker run hello-world
#8.查看hello-world镜像在不在
docker images
#9.了解--卸载docker
#9.1卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#9.2删除资源
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
注:/var/lib/docker docker的默认工作路径
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bcf6dac021094107914f14bab5482e0c~tplv-k3u1fbpfcp-zoom-1.image)
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b35061bbd15b41e799566762f12999eb~tplv-k3u1fbpfcp-zoom-1.image)
4.配置案例云镜像加速(个人版免费)
1.登录阿里云
2.找到镜像加速地址
3.配置使用
1.sudo mkdir -p /etc/docker 2.sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://yu7743ej.mirror.aliyuncs.com"] } EOF 3.sudo systemctl daemon-reload 4.sudo systemctl restart docker
5.Run 的流程和 docker 原理
run 的流程
docker 是怎么工作的?docker 是一个 Client - Server 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问!DockerServer 接收到 Docker-Client 的指令,就会执行这个命令!
Docker 为什么比 VM 快?
6.docker 的常用命令
6.1 帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包含镜像和容器的数量
docker 命令 --help #查看帮助信息
docker命令文档:[https://docs.docker.com/engine/reference/commandline/](https://docs.docker.com/engine/reference/commandline/cli/)
6.2 镜像命令
6.2.1 docker images #查看所有本地的主机上的镜像
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a,--all #列出所有镜像
-q,--quit #只显示镜像的id
6.2.2 docker search #搜索镜像
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11803 [OK]
mariadb MariaDB Server is a high performing open sou… 4492 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 885 [OK]
percona Percona Server is a fork of the MySQL relati… 565 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 391 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 89
centurylink/mysql Image containing mysql. Optimized to be link… 59 [OK]
# 可选项,通过收藏来过滤
--filter=STARS=3000 #搜索出来的镜像stars大于3000
6.2.3 docker pull #下载镜像
#下载镜像docker pull 镜像名[:tag]
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是latest
latest: Pulling from library/mysql
ffbb094f4f9e: Pull complete #分层下载,docker image的核心 联合文件系统
df186527fc46: Pull complete
fa362a6aa7bd: Pull complete
5af7cb1a200e: Pull complete
949da226cc6d: Pull complete
bce007079ee9: Pull complete
eab9f076e5a3: Pull complete
8a57a7529e8d: Pull complete
b1ccc6ed6fc7: Pull complete
b4af75e64169: Pull complete
3aed6a9cd681: Pull complete
23390142f76f: Pull complete
Digest: sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#指定版本下载
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
ffbb094f4f9e: Already exists #这里和上面的共用了,这是linux的一个优点
df186527fc46: Already exists
fa362a6aa7bd: Already exists
5af7cb1a200e: Already exists
949da226cc6d: Already exists
bce007079ee9: Already exists
eab9f076e5a3: Already exists
c7b24c3f27af: Pull complete
6fc26ff6705a: Pull complete
bec5cdb5e7f7: Pull complete
6c1cb25f7525: Pull complete
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
6.2.4 docker rmi -f 镜像 id/镜像名称 #删除镜像
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker rmi 738e7101490b
Untagged: mysql:5.7
Untagged: mysql@sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Deleted: sha256:738e7101490b45decf606211a5437ed87aa6a82f1ff03c354564bf9375ce20f9
Deleted: sha256:addad8cfeac97b96eb6652a576269346ac96def9a6709ed2388e24fff4345837
Deleted: sha256:e288c3439a7e2f423f50bf22979a759371c51a70bbbaa450993c336978460b1a
Deleted: sha256:33ece15accaa3bb20e3dee84e2e4501469b917c3abba3d5475cd1fec8bb3e82c
Deleted: sha256:6b15390bceeca8424d82e75f5c9aca5eb4693f96849d6382168a99747877693d
#删除全部镜像
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:latest
Untagged: mysql@sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Deleted: sha256:bbf6571db4977fe13c3f4e6289c1409fc6f98c2899eabad39bfe07cad8f64f67
Deleted: sha256:a72da99dce60d6f8d4c4cffa4173153c990537fcdfaa27c35324c3348d55dd5c
Deleted: sha256:8b535d432ef2fbd45d93958347b2587c5cbe334f07d6909ad9d2d480ebbafb65
Deleted: sha256:14d13a3b33fc76839f156cd24b4636dab121e6d3d026cefa2985a4b89e9d4df8
Deleted: sha256:77c21a5a897a1ba752f3d742d6c94ee7c6b0e373fd0aeecc4bf88b9a3982007e
Deleted: sha256:189162becec8bb4588c54fb4ea7e62d20121812e68aeb0291fb4bb5df9ec0985
Deleted: sha256:34980dadfd6a5bb9d7f9e8d4e408000e0a8f4840cc7d3092dc94357ebe7a89b6
Deleted: sha256:15b2beb64a91785c8f3709ecd2410d13577b3174faad164524434ce6a7633506
Deleted: sha256:e38dd14d47b61171927ea4b928f7296123b65a81ad1cfde8f5d00cadf1e81bbb
Deleted: sha256:865abdfd8444741f581ce582e4ac5746c4a00c282febf65aa808a235ec7abf78
Deleted: sha256:b1e35233e1ac953bd06fc8fa83afb3a88c39c1aeae0c89a46cb1b652d6821b38
Deleted: sha256:3bcfdf6641227ff63e3ddf9e38e45cf317b178a50a664e45c6ae596107d5bc46
Deleted: sha256:f11bbd657c82c45cc25b0533ce72f193880b630352cc763ed0c045c808ff9ae1
Untagged: hello-world:latest
Untagged: hello-world@sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
6.3 容器命令
**说明:只有有了镜像,才可以创建容器,Linux,下载一个centos镜像来测试学习**
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
6.3.1 新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
#测试,启动并进入容器
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -it centos /bin/bash
[root@d5c5b9d0bc90 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#从容器中退出,返回主机
[root@d5c5b9d0bc90 /]# exit
exit
[root@iZ2zefiis08efdip3nlhu2Z ~]# ls
button frp mysql57-community-release-el7-11.noarch.rpm out.txt
devstack jar.file nginx
6.3.2 列出所有运行的容器
#docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带出历史运行的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5c5b9d0bc90 centos "/bin/bash" 3 minutes ago Exited (0) 2 minutes ago cool_cannon
9b8a8e35cf07 feb5d9fea6a5 "/hello" 43 hours ago Exited (0) 43 hours ago jovial_mahavira
6.3.3 退出容器
exit #直接容器停止并退出
ctrl + p + q #容器不停止并退出
6.3.4 删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果强制需要-f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
6.3.5 启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前运行的容器
6.4 常用的其他命令
6.4.1 后台启动容器
#命令 docker run -d 镜像名
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -d cento
#问题docker ps,发现centos直接停止了
#常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了
6.4.2 查看日志
docker logs -f -t --tail 容器 #默认没有日志
#自己编写一段shell脚本
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
427515b5f705df09e2a53ec4a8627905e372978ff0b8420c9b29eecd8be84a5e
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
427515b5f705 centos "/bin/sh -c 'while t…" 46 seconds ago Up 46 seconds dreamy_knuth
#显示日志
-tf #显示日志
--tail number #要显示日志条数
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker logs -tf --tail 10 427515b5f705
2021-12-09T08:35:37.620883699Z kuangshen
2021-12-09T08:35:38.623134389Z kuangshen
2021-12-09T08:35:39.625366194Z kuangshen
2021-12-09T08:35:40.627611852Z kuangshen
2021-12-09T08:35:41.629898108Z kuangshen
2021-12-09T08:35:42.632052261Z kuangshen
2021-12-09T08:35:43.634256067Z kuangshen
2021-12-09T08:35:44.636545513Z kuangshen
2021-12-09T08:35:45.638704350Z kuangshen
2021-12-09T08:35:46.640731850Z kuangshen
2021-12-09T08:35:47.642781720Z kuangshen
2021-12-09T08:35:48.644839453Z kuangshen
2021-12-09T08:35:49.647012074Z kuangshen
2021-12-09T08:35:50.648999842Z kuangshen
6.4.3 查看容器中进程信息
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker top 427515b5f705
UID PID PPID C STIME TTY TIME CMD
root 23619 23598 0 16:34 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 23903 23619 0 16:38 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
6.4.4 查看镜像的元数据
docker inspect 容器id
6.4.5 进入当前正在运行的容器
#我们通常容器都是使用后台方式运行,需要进入容器,修改一些配置
#命令
docker exec -it 容器id /bin/bash
#测试
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
f3a81f28c21d6f82a1c27521f53861d2a31a75e44f0671601bec6285de1b6d6e
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3a81f28c21d centos "/bin/sh -c 'while t…" 3 seconds ago Up 3 seconds angry_albattani
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker exec -it f3a81f28c21d /bin/bash
[root@f3a81f28c21d /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:45 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 38 0 0 08:45 pts/0 00:00:00 /bin/bash
root 54 1 0 08:45 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 55 38 0 08:45 pts/0 00:00:00 ps -ef
#方式二
docker attach 容器id
#测试
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker attach 容器id
正在运行的代码......
#docker exec #进入容器后,开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会进入新的终端
**从容器拷贝文件到主机上**
docker cp 容器id:容器内路径 目的主机路径
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
670bcd0d814f centos "/bin/bash" 51 seconds ago Up 50 seconds mystifying_hermann
#进入docker容器内部
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker attach 670bcd0d814f
[root@670bcd0d814f /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@670bcd0d814f /]# cd /home
[root@670bcd0d814f home]# ls
#在容器内新建一个文件
[root@670bcd0d814f home]# touch test.java
[root@670bcd0d814f home]# ls
test.java
[root@670bcd0d814f home]# exit
exit
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
670bcd0d814f centos "/bin/bash" About a minute ago Exited (0) 6 seconds ago mystifying_hermann
#将这个文件拷贝出来到主机上
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker cp 670bcd0d814f:/home/test.java /home
[root@iZ2zefiis08efdip3nlhu2Z ~]# ls
button frp mysql57-community-release-el7-11.noarch.rpm out.txt
devstack jar.file nginx
[root@iZ2zefiis08efdip3nlhu2Z ~]# cd /home
[root@iZ2zefiis08efdip3nlhu2Z home]# ls
jar.file videodemo-0.0.1-SNAPSHOT.jar
mysql57-community-release-el7-11.noarch.rpm videodemo4.rar
test.java
#拷贝是一个手动过程,未来我们使用 -V 卷的技术,可以实现
小结
7.作业:docker 安装 nginx
docker 安装 nginx
# 1.搜索镜像 search 建议大家去docker搜索,可以看到帮助信息
# 2.下载镜像 pull
# 3.运行测试
[root@iZ2zefiis08efdip3nlhu2Z home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
e5ae68f74026: Pull complete
21e0df283cd6: Pull complete
ed835de16acd: Pull complete
881ff011f1c9: Pull complete
77700c52c969: Pull complete
44be98c0fab6: Pull complete
Digest: sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@iZ2zefiis08efdip3nlhu2Z home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f652ca386ed1 7 days ago 141MB
centos latest 5d0da3dc9764 2 months ago 231MB
[root@iZ2zefiis08efdip3nlhu2Z home]# docker run -d --name nginx01 -p 3344:80 nginx
1442a7fbd27faf785267741dc61bb4724e22fad4cfa96c1508a0234adcb7b8ae
# -d 后台运行
# --name 容器命名
# -p 宿主机端口:容器内部端口
[root@iZ2zefiis08efdip3nlhu2Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1442a7fbd27f nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 0.0.0.0:3344->80/tcp nginx01
670bcd0d814f centos "/bin/bash" 4 hours ago Up 4 hours mystifying_hermann
[root@iZ2zefiis08efdip3nlhu2Z home]# 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@iZ2zefiis08efdip3nlhu2Z home]# docker exec -it nginx01 /bin/bash
root@1442a7fbd27f:/# ls
bin docker-entrypoint.d home media proc sbin tmp
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@1442a7fbd27f:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@1442a7fbd27f:/# cd /etc/nginx
root@1442a7fbd27f:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@1442a7fbd27f:/etc/nginx#
端口暴露
思考问题:修改主宿机映射到 docker 容器内---卷问题?见之后
8.作业:docker 安装 tomcat
docker 安装 tomcat
#官方使用 (一般用来测试,用完自动删除)
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台,停止了容器,容器还是可以查到的
#下载再启动
docker pull tomcat:9.0
#[root@iZ2zefiis08efdip3nlhu2Z home]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
5e0b432e8ba9: Pull complete
a84cfd68b5ce: Pull complete
e8b8f2315954: Pull complete
0598fa43a7e7: Pull complete
e0d35e3be804: Pull complete
8fc448a0c88b: Pull complete
dbdff6e5955b: Pull complete
5daf3771e3d8: Pull complete
e4265b3badfc: Pull complete
126f233cb97a: Pull complete
Digest: sha256:429d5c140820d5eba38042823501d5f4e0f03b282133513e29c22d6358daa7c7
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
#启动
[root@iZ2zefiis08efdip3nlhu2Z home]# docker run -d -p 3355:8080 --name tomcat01 tomcat
016c9b95a02dcc91e23ce196ff88528dff4f9074bdaf4cd0a76ca28b0aa681b8
#测试访问没有问题
#进入容器
[root@iZ2zefiis08efdip3nlhu2Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
016c9b95a02d tomcat "catalina.sh run" 4 minutes ago Up 4 minutes 0.0.0.0:3355->8080/tcp tomcat01
1442a7fbd27f nginx "/docker-entrypoint.…" 41 minutes ago Up 21 minutes 0.0.0.0:3344->80/tcp nginx01
[root@iZ2zefiis08efdip3nlhu2Z home]# docker exec -it tomcat01 /bin/bash
root@016c9b95a02d:/usr/local/tomcat# ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
root@016c9b95a02d:/usr/local/tomcat# cd webapps
root@016c9b95a02d:/usr/local/tomcat/webapps# ls
#发现问题:1.linux命令少了 2没有webapps
#因为:阿里云镜像的原因,默认是最小的镜像,所有没必要的都要提出,来自保证最小可运行的环境
#解决:复制一下即可
root@016c9b95a02d:/usr/local/tomcat# cd webapps
root@016c9b95a02d:/usr/local/tomcat/webapps# ls
root@016c9b95a02d:/usr/local/tomcat/webapps# cd ..
root@016c9b95a02d:/usr/local/tomcat# cd webapps.dist
root@016c9b95a02d:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@016c9b95a02d:/usr/local/tomcat/webapps.dist# cd ..
root@016c9b95a02d:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@016c9b95a02d:/usr/local/tomcat# cd webapps
root@016c9b95a02d:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
9.作业:docker 安装 es + kibana
略:es + kibana 还未学习!!!!
10.可视化--portainer
什么是 portainer?Docker 图形界面管理工具!提供一个后台面板提供我们操作!
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock
--privileged=true portainer/portainer
访问测试:http://ip:8088/
通过它来访问了:
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9ae81650b71448149ced22de3917004c~tplv-k3u1fbpfcp-zoom-1.image)
创建账户:admin、123456
进入之后的面板:
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dba38684dd8545adb2af4692a4e69721~tplv-k3u1fbpfcp-zoom-1.image)
11.镜像原理之联合文件系统
镜像是什么?镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。所有的应用,直接打包 docker 镜像,就可以直接跑起来!
如何得到镜像:从远程仓库下载、朋友拷贝给你、自己制作一个镜像 DockerFile
Docker 镜像加载原理
UnionFS(联合文件系统)我们下载的时候看到的一层层就是这个!
Docker 镜像加载原理
分层理解(不同镜像之间的分层共用)
镜像层无法改变,自己增加的操作会是新的一层,可以发布成一个新的镜像。提交自己的镜像
docker commit #提交容器成为一个新的副本
#,命令和git类似
docker commit -m = "提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
实战测试:
#1.启动一个默认的tomcat
#2.发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的!
#3.我自己拷贝进去了基本的文件
#4.将我们操作过的容器通过commit提交为一个镜像!我们以后就可以使用我们修改后的进行镜像就可以了。
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/73c7a6c8866c43e3b866e51768de9e93~tplv-k3u1fbpfcp-zoom-1.image)
注:到了这里才是入门 docker!😂
学习视频:https://www.bilibili.com/video/BV1og4y1q7M4?p=17&spm_id_from=pageDriver
版权声明: 本文为 InfoQ 作者【Studying_swz】的原创文章。
原文链接:【http://xie.infoq.cn/article/93cd2f466f811ecf1dbb69197】。文章转载请联系作者。
Studying_swz
还未添加个人签名 2020-12-23 加入
还未添加个人简介
评论