Docker学习笔记

这篇博客详细介绍了Docker的安装过程,包括在CentOS上的安装。接着探讨了Docker的工作原理,解释了为何它比虚拟机更快。然后,列举了Docker的常用命令,如`docker images`、`run`、`ps`等,并展示了如何部署nginx、tomcat和elasticsearch+kibana。此外,博客还讲解了镜像的概念、数据卷的使用以及Dockerfile的编写和构建镜像的过程。最后,讨论了Docker网络,包括桥接模式、自定义网络和容器间的网络联通。
摘要由CSDN通过智能技术生成

一、Docker安装

1、获取官方帮助文档

1.从官网最下方Docs选项中打开帮助文档。

2.选择下载并安装

image-20210823085528163

3.选择linux

image-20210823085706533

4.左侧选择在centos中安装

image-20210823085622814

可以看到此页为centos7中安装docker的官方教程

image-20210823085840186

2、安装Docker

#卸载命令
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#需要的安装包
yum install -y yum-utils
#设置镜像仓库
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#默认为国外镜像仓库,此处替换为阿里云
#更新软件包索引
yum makecache fast
#安装docker相关内容,docker-ce为社区版,docker-ee为企业版
yum install docker-ce docker-ce-cli containerd.io


#启动docker
systemctl start docker
#验证是否启动成功
docker version

image-20210823092922245

#有以上信息说明安装成功

#hello world(此步之前可能需要提前配置镜像加速)
docker run hello-world
#输出以下结果

image-20210823094803052

#查看镜像信息
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 months ago   13.3kB
#配置镜像加速
#登录阿里云,找到右上角控制台面板,打开后搜索容器镜像服务

image-20210823095214678

#打开最下方镜像加速器
#输入右方给出的所有命令
mkdir -p /etc/docker#创建加速文件目录

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["阿里云给出的加速网址"]
}
EOF

systemctl daemon-reload

systemctl restart docker

二、Run的流程和Docker原理

1、回顾hello-world流程

hello-world是如何启动的

image-20210823100707733

通过上图可以得出以下工作流程图

image-20210823101110224

2、底层原理

Docker是怎么工作的?

Docker是一个client-server结构的系统,Docker的守护进程运行在主机上。客户端通过socket来访问。

Docker-server接收到Docker-client的指令后执行指令。

image-20210823102343644

Docker为什么比虚拟机快?

1.Docker有着比虚拟机更少的抽象层。

2.Docker利用的是宿主机的内核,虚拟机需要Guest OS。Docker是在主机上直接安装Docker服务,所有的东西都运行在Docker服务上。

如图

image-20210823103648236

所以,新建一个容器时,Docker不需要和虚拟机一样加载一个完整的操作系统,自然比虚拟机更快。

image-20210823104452964

三、Docker的常用命令

1、帮助命令

docker version             #显示版本信息
docker info                #显示详细信息
docker '命令' --help        #显示命令信息

2、帮助文档

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

在官方帮助文档中能查看所有命令信息

3、镜像命令

docker images

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 months ago   13.3kB

REPOSITORY  #镜像仓库源(镜像名)
TAG         #镜像标签(版本标签)
IMAGE ID    #镜像id
CREATED     #镜像创建时间
SIZE        #镜像大小

#可选项
-a, --all               #显示所有信息(列出所有镜像)
-q, --quiet             #只显示id

docker search

[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11308     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4297      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   838                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   550       [OK]       
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   300       [OK]

#可选项
-f, --filter='条件'  #通过条件过滤

docker pull

[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
e1acddbe380c: Pull complete       #分层下载,联合文件系统,docker的灵魂。
bed879327370: Pull complete 
03285f80bafd: Pull complete 
ccc17412a00a: Pull complete 
1f556ecc09d1: Pull complete 
adc5528e468d: Pull complete 
1afc286d5d53: Pull complete 
6c724a59adff: Pull complete 
0f2345f8b0a3: Pull complete 
c8461a25b23b: Pull complete 
3adb49279bed: Pull complete 
77f22cd6c363: Pull complete 
Digest: sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

docker rmi

[root@localhost ~]# docker rmi -f 镜像id                  #删除指定镜像
[root@localhost ~]# docker rmi -f 镜像id 镜像id 镜像id      #删除多个镜像
[root@localhost ~]# docker rmi -f $(docker images -aq)    #按id删除所有镜像
Untagged: mysql:latest
Untagged: mysql@sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926
Deleted: sha256:5a4e492065c722ec8cc7413552bafc6fd5434c5ad90797e898ccc4e347e21aa5
Deleted: sha256:816bf92c28337cd97393cb1fab7697398c9b657baa8e80ad394e1193bdd7c323
Deleted: sha256:4d9cad11f64589b397b1033d6f14cea1794efbee0a9923932fb3394a67cb9812
Deleted: sha256:d8cc28a31b469770ffe2239a29aaef8745fedc4df3c545b1615ba864796709a3
Deleted: sha256:c65a377e07f1205f3c28f7067d2ac4da3a65fbe7c1b4606b48028db3818d2f4c
Deleted: sha256:7dcd840f1d4be1a565f470453489932a17c62ed36b959d7839f004606ba22f0b
Deleted: sha256:1438a7497295aed687ea1875073a1f9faa6a308f787767b952da4a1a21e2c2c6
Deleted: sha256:c728863b4742db55b9630b0129abac718c8c9704e5ed86e8af93dfb47a0f6214
Deleted: sha256:0f12df3ff796b6fb619c63bf2f78f16d1033746e19f75ffc2d8d72ea69242ad4
Deleted: sha256:3072318e40ebff019298a59290e615ad6170a651f3121c0e356dcf3dd7426136
Deleted: sha256:a69e3133dd3c0a81bd439120abb8f98e43c1581629896725b968db906c8fdfac
Deleted: sha256:6d9498fd63c38c4b0b9bbc563087b4bc164b2fb5211832a8d43c60a9692a7f84
Deleted: sha256:f68ef921efae588b3dd5cc466a1ca9c94c24785f1fa9420bea15ecc2dedbe781
Untagged: hello-world:latest
Untagged: hello-world@sha256:0fe98d7debd9049c50b597ef1f85b7c1e8cc81f59c8d623fcb2250e8bec85b38
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726

#可选项
-f     #按id删除镜像



#在docker rmi -f $(docker images -aq)报错的情况下
1)批量停止container:

sudo docker ps -a | awk '{print $1}'| grep -v CONTAINER | xargs sudo docker stop

2)批量删除container:

sudo docker images | awk '{print $3}' | grep -v IMAGE | xargs sudo docker rmi

3)批量删除image:

sudo docker images | awk '{print $1}' | grep -v REPOSITORY | xargs sudo docker rmi

4、容器命令

要先下载镜像才能创建容器

新建容器并启动

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

在centos中再下载一个centos镜像,之后操作都在该镜像中

run

docker run [可选参数] image

#参数说明
--name='name'           #容器命名
-d                      #以后台方式运行
-it                     #使用交互方式运行(进入容器查看内容)
-p(小写)                #指定容器端口
    -p 'port':'port'    #端口映射,前者为主机端口,后者为容器端口
    -p ip:'port':'port'
    -p 'port'           #容器端口
-P(大写)                #使用随机端口

image-20210823144121566

可以看出,用户名已经变为该镜像的id,在xshell中显示的文件夹颜色也与主机不同。

镜像中的系统很多都是不完善的,甚至很多基础命令都用不了。

ps

[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS                          PORTS     NAMES
e25018a0b96d   centos         "/bin/bash"   About a minute ago   Exited (0) About a minute ago             pedantic_knuth
98d1443a7c2d   centos         "/bin/bash"   9 minutes ago        Exited (0) 2 minutes ago                  infallible_raman
bc63240bf7da   d1165f221234   "/hello"      5 hours ago          Exited (0) 5 hours ago                    happy_archimedes

#可选项
-a         #列出所有运行过的容器
-n='num'   #显示最近创建过的几个容器
-q         #只显示编号

退出容器

exit                  #停止容器并退出
ctrl+p+q              #退出容器不停止

删除容器

rm '容器id'              #删除指定id的容器,不能删除运行中的容器
rm -f                   #强制删除
rm -f $(docker ps -aq)  #强制删除所有容器(按id)

开启和停止容器

docker start '容器id'
docker restart '容器id'
docker stop '容器id'
docker kill '容器id'

#含义与Linux基础操作相同

四、常用其他命令

1、后台启动

#命令docker run -d '镜像名'
[root@localhost /]# docker run -d centos
3aac07f49b2922859b6cb4aa3f5adf21b5278170a599380dae01bbbc90a2538d
[root@localhost /]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
#问题:后台启动后进程自动停止
#docker容器使用后台启动时,必须要有一个前台进程,否则会自动停止。

#比如nginx容器启动后,发现自己没有提供服务就立刻停止(自杀),他认为自己没有程序了。

2、查看日志

docker logs -f -t --tail #发现容器没有日志
#自己写一段shell脚本
"while true;do echo 123456;sleep 1;done"

[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo 123456;sleep 1;done"
372dd788f6ee829092a28d94dc40536725767d8acce4907f4c99ebbf0658821a
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
372dd788f6ee   centos    "/bin/sh -c 'while t…"   6 seconds ago   Up 6 seconds             festive_banach
[root@localhost /]# docker logs -f -t --tail 10 372dd788f6ee
2021-08-23T07:43:30.674632053Z 123456
2021-08-23T07:43:31.680282821Z 123456
2021-08-23T07:43:32.685241177Z 123456
2021-08-23T07:43:33.689979428Z 123456
2021-08-23T07:43:34.694671996Z 123456
2021-08-23T07:43:35.699345232Z 123456
2021-08-23T07:43:36.701925301Z 123456
2021-08-23T07:43:37.707651945Z 123456
2021-08-23T07:43:38.712024853Z 123456
2021-08-23T07:43:39.717165858Z 123456

3、查看容器中进程信息

#docker top 容器id
[root@localhost /]# docker top 372dd788f6ee
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3784                3766                0                   15:43               ?                   00:00:00            /bin/sh -c while 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值