docker学习笔记(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: docker学习笔记(一)

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

  • 系统版本
cat /etc/os-release
#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的默认工作路径


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帮助命令

```powershell
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 #查看所有本地的主机上的镜像

```powershell
[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 #搜索镜像

```powershell
[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 #下载镜像

```powershell
#下载镜像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/镜像名称 #删除镜像

```powershell
[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镜像来测试学习**
```powershell
[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 新建容器并启动

`````powershell
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 列出所有运行的容器

```powershell
#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 退出容器

```powershell
exit  #直接容器停止并退出
ctrl + p + q #容器不停止并退出
```

6.3.4 删除容器

```powershell
docker rm 容器id  #删除指定的容器,不能删除正在运行的容器,如果强制需要-f
docker rm -f $(docker ps -aq)  #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器
```

6.3.5 启动和停止容器的操作

```powershell
docker start 容器id  #启动容器
docker restart 容器id  #重启容器
docker stop 容器id  #停止当前正在运行的容器
docker kill 容器id    #强制停止当前运行的容器
```

6.4 常用的其他命令

6.4.1后台启动容器

```powershell
#命令 docker run -d 镜像名
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -d cento
#问题docker ps,发现centos直接停止了
#常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了
```

6.4.2 查看日志

```powershell
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 查看容器中进程信息

```powershell
[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 查看镜像的元数据

```powershell
docker inspect 容器id
```

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

```powershell
#我们通常容器都是使用后台方式运行,需要进入容器,修改一些配置
#命令
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 #进入容器正在执行的终端,不会进入新的终端
```
**从容器拷贝文件到主机上**
```powershell
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/

通过它来访问了:

创建账户:admin、123456

进入之后的面板:

11.镜像原理之联合文件系统

  • 镜像是什么?
    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。
    所有的应用,直接打包docker镜像,就可以直接跑起来!
  • 如何得到镜像:
    从远程仓库下载、朋友拷贝给你、自己制作一个镜像DockerFile
  • Docker镜像加载原理
  • UnionFS(联合文件系统)
    我们下载的时候看到的一层层就是这个!

  • Docker镜像加载原理



  • 分层理解(不同镜像之间的分层共用)


    镜像层无法改变,自己增加的操作会是新的一层,可以发布成一个新的镜像。


  • 提交自己的镜像
docker  commit #提交容器成为一个新的副本
#,命令和git类似
docker commit -m = "提交的描述信息"  -a="作者" 容器id 目标镜像名:[TAG]

实战测试:

#1.启动一个默认的tomcat
#2.发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的!
#3.我自己拷贝进去了基本的文件
#4.将我们操作过的容器通过commit提交为一个镜像!我们以后就可以使用我们修改后的进行镜像就可以了。

注:到了这里才是入门docker!😂

学习视频:

https://www.bilibili.com/video/BV1og4y1q7M4?p=17&spm_id_from=pageDriver

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
Docker 容器
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
|
5月前
|
Kubernetes Docker 容器
Kubernetes学习笔记-Part.06 Docker安装
Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退
44 1
|
7月前
|
NoSQL 应用服务中间件 Redis
docker学习笔记(四)
docker学习笔记(四)
60 0
|
5月前
|
前端开发 应用服务中间件 数据库
Docker-docker-compose学习笔记(yaml,实战)
Docker-docker-compose学习笔记(yaml,实战)
235 0
|
27天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
27天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
27天前
|
Ubuntu 网络协议 Docker
docker学习笔记1,入门到精通
docker学习笔记1,入门到精通
|
4月前
|
XML Docker 容器
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
|
4月前
|
Docker 容器
Docker学习笔记六:如何分享一个镜像
Docker学习笔记六:如何分享一个镜像
Docker学习笔记六:如何分享一个镜像
|
4月前
|
存储 Docker 容器
Docker学习笔记二:如何创建Docker镜像?
Docker学习笔记二:如何创建Docker镜像?