Docker 学习记录(一)

  因为个人学习需要,利用空闲时间学习一下Docker相关内容,主要看的B站上狂神的视频,讲解的十分清晰透彻,因此特此进行学习记录。


一、Docker 中的相关名词解释

Docker结构图
镜像(image):

一个模版,可以通过这个模版创建容器服务,通过一个镜像可以创建多个容器(最终的项目运行于容器中)。

容器(Container):

一个或是一组独立运行的应用,通过镜像创建;
有启动、停止、删除等基本命令。

仓库(Repository):

存放镜像的地方,分为共有仓库和私有仓库,Docker Hub默认为国外源,可以通过配置阿里云的镜像加速器。


二、Docker 安装

  因为本人使用的电脑为MacOS系统,因此安装的 Docker 为桌面版,直接通过 Docker 官网进行下载即可。如果是使用的服务器需要命令行的下载过程,可以检索一下下载过程,应该有许多相应的资源。


三、配置阿里云镜像加速

  注册成为阿里云用户以后,选择容器镜像服务,在镜像工具中选择镜像加速器,就可以看见右侧有个加速器地址,将它复制下来。

配置阿里云加速器

打开我们下载好的 Docker for Mac ,等它初始化成功后,点击右上角的小齿轮,进入设置界面,打开右侧边栏的Docker Engine,在其中添加一个字段registry-mirrors,值为上面复制的加速器地址,效果如下图所示。

Docker for Mac加速器配置


四、Docker 整体流程和原理

4.1 Docker Run 的流程

Docker Run流程

4.2 Docker 底层原理

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

  Docker具有以下特点:

  • 抽象层更少;
  • 利用宿主主机的内核,虚拟机需安装Guest OS。

因此必须虚拟机的速度更快。

Docker与VM的结构对比


五、Docker的常用命令

5.1 帮助命令

docker version		# 显示 Docker 的版本信息
docker info			# 显示 Docker 的系统信息
docker xxx --help	# 帮助命令

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

5.2 镜像命令

  • docker images:查看所有本地的主机上的镜像
~ % docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
docker/getting-started   latest    720f449e5af2   13 months ago   27.2MB

# 解释
>> REPOSITORY:镜像的仓库源
>> TAG		 :镜像的标签
>> IMAGE ID	 :镜像的id
>> CREATED	 :镜像的创建时间
>> SIZE		 :镜像的大小


# 查看可选项
~ % docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             # 列出所有镜像
  -q, --quiet           # 只显示镜像的ID
  • docker search:搜索镜像信息
~ % docker search mysql	# 查询mysql镜像
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13694     [OK]
mariadb                         MariaDB Server is a high performing open sou…   5230      [OK]
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   722       [OK]
percona                         Percona Server is a fork of the MySQL relati…   598       [OK]
bitnami/mysql                   Bitnami MySQL Docker Image                      80                   [OK]
databack/mysql-backup           Back up mysql databases to... anywhere!         79
linuxserver/mysql-workbench                                                     48
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   41
...


# 查看可选项
~ % docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   过滤条件
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output


# 过滤出STARS大于3000的镜像 使用 --filter=STARS=3000
~ % docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   13694     [OK]
mariadb   MariaDB Server is a high performing open sou…   5230      [OK]
  • docker pull:拉取镜像
# 下载镜像 docker pull 镜像名:tag
~ % docker pull mysql
Using default tag: latest	# 如果不写 tag,则默认为 latest
latest: Pulling from library/mysql
12a06ca91af8: Pull complete	# 分层下载,docker image 的核心,联合文件系统
1fec1cb1944f: Pull complete
aede38c79379: Pull complete
51b980849561: Pull complete
f503d79ed4bc: Pull complete
6fb44db361f7: Pull complete
943b6dcee7de: Pull complete
911277c1fe4b: Pull complete
a477017d0457: Pull complete
84b5061403a5: Pull complete
5ff27d035d66: Pull complete
Digest: sha256:3d7ae561cf6095f6aca8eb7830e1d14734227b1fb4748092f2be2cfbccf7d614	# 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest	# 真实地址


# 指定版本下载
~ % docker pull mysql:5.7
# 因为电脑芯片不一样,因此此处下载失败,未搜索到arm的版本,可以自行尝试


~ % docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
mysql                    latest    7b6f3978ca29   5 weeks ago     550MB
docker/getting-started   latest    720f449e5af2   13 months ago   27.2MB
  • docker rmi:删除镜像
# 删除我们刚刚下载的 mysql 镜像
~ % docker rmi -f 7b6f3978ca29
Untagged: mysql:latest
Untagged: mysql@sha256:3d7ae561cf6095f6aca8eb7830e1d14734227b1fb4748092f2be2cfbccf7d614
Deleted: sha256:7b6f3978ca2905ae9bc14cfe86ae2f004f8c36561b722a06f64b73001b1898a5
Deleted: sha256:b0d765a548cab4cff3aacc1f5efb2fff41f0bf39f952487effbe8fa6e978979b
Deleted: sha256:c99602fe82b50c593a30ab0f5205bb8ea4820841cfe8b33222ed1afbac9e0dba
Deleted: sha256:6525369564ad174b448e1b845ac3d0f01b690198c056ebc8b39dcf0ca6affb58
Deleted: sha256:d0c38e5af4b7bd949ad8703128b8ea7f69afd24cafe54a2fc4779b1dc20855cd
Deleted: sha256:a46b9598fc64a06c362274a8c3f74a9a232f046917da0243e26a5b93d9cd7d79
Deleted: sha256:293284e8f84e7017e879cf8b4087b22b42642a77017eff856ea38ce69b8ef124
Deleted: sha256:771d067fcad5899cc5726a8bcb3dc7efb05bf7acaa366d2c004017a2d7bf4b7a
Deleted: sha256:1ff72726c717dea4b94b117b2806aaf765399fc8ca6576426c7263b6991c0138
Deleted: sha256:99ef9db9899dcba7d6c3402c52bbd717431b5b51410c5649388d5e752127c354
Deleted: sha256:8047c30bed75790cf803710aa256b21d3e69e8247f2123ccdbb817563a98b7e8
Deleted: sha256:57f5fe95c403b4633698a828dba5a31f8b15ab1636d3b5a233c8356352260522

# 删除命令
docker rmi -f 镜像ID		# 删除指定的镜像
docker rmi -f 镜像ID 镜像ID 镜像ID ...	# 删除多个镜像
docker rmi -f $(docker images -aq)	# 删除全部的镜像

5.3 容器命令

  当我们拥有镜像,才能创建对应的容器,因此为了进行简单测试,拉取一个 CentOS 镜像进行相应操作。

~ % docker pull centos
Using default tag: latest
latest: Pulling from library/centos
52f9ef134af7: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
  • docker run:新建容器并启动容器的命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 参数说明
--name="Name"	容器名字,用来区分容器
-d				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p				指定容器的端口	-p 8080:8080
		-p ip:主机端口:容器端口
		-p 主机端口:容器端口 (常用) 
		-p 容器端口
		容器端口
-P				随机指定端口
--rm			用后就删除

# 测试,启动并进入容器
~ % docker run -it centos /bin/bash
[root@8079b170c601 /]# ls	# 查看容器内的内容,此为基础版本
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器中退出
[root@8079b170c601 /]# exit
exit
  • docker ps:列出所有容器
# docker ps 参数说明
		# 列出当前正在运行的容器
-a		# 列出当前正在运行的容器 + 带出历史运行过的容器
-n=?	# 显示最近创建的容器
-q		# 只显示容器的编号

~ % docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
~ % docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                     PORTS     NAMES
2534ab7c0e06   centos                   "/bin/bash"              10 seconds ago   Exited (0) 6 seconds ago             admiring_hodgkin
0beb28f7c003   docker/getting-started   "/docker-entrypoint.…"   4 days ago       Exited (0) 4 days ago                adoring_kowalevski
  • 退出容器
exit	# 直接容器停止并退出
ctrl + p + q	# 容器不停止退出,Mac系统按键相同

~ % docker ps	# 运行容器后退出查看运行中的容器
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
cbb965651525   centos    "/bin/bash"   33 seconds ago   Up 32 seconds             kind_matsumoto
  • 删除容器
docker rm 容器ID						# 删除指定的容器,不能删除正在运行的容器,如果需要强制删除,使用 rm -f
docker rm -f $(docker images -aq)	# 删除所有的容器
docker ps -a -q |xargs docker rm	# 删除所有的容器
  • 启动和停止容器
docker start 容器id		# 启动容器
docker restart 容器id	# 重启容器
docker stop 容器id		# 停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

5.4 其他常用命令

  • docker run -d 镜像名:后台启动容器
# 会出现问题,使用 docker ps,发现容器停止了
# docker 容器使用后台运行,必须要有一个前台进程,docker 发现没有应用就会自动停止

# 为了方便后面的演示,这里启动了一个 CentOS 容器
~ % docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
35267f0fb66e   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             mycentos
  • docker logs 容器ID:查看日志
# 可选参数说明
-tf					# 显示日志
--tail number		# 显示日志条数

# 测试
~ % docker logs -tf 35267f0fb66e
2023-01-18T12:01:10.051402833Z [root@35267f0fb66e /]# clear
2023-01-18T12:01:10.051644625Z bash: clear: command not found
2023-01-18T12:01:14.593637044Z [root@35267f0fb66e /]# exit
2023-01-18T12:01:14.593717419Z exit
  • docker top 容器ID:查看容器中的进程信息
# 测试
~ % docker top 35267f0fb66e
UID                 PID                 PPID                C
root                4358                4332                0
  • docker inspect 容器ID:查看镜像的元数据
# 测试
~ % docker inspect 35267f0fb66e
[
    {
        "Id": "35267f0fb66ef0ab7f540403a96c2fc4daa9f5c23f599061cdffef0a0efc04df",
        "Created": "2023-01-18T12:01:04.191507095Z",
        "Path": "/bin/bash",
        "Args": [],
		...		# 后面太长了,此处省略后面内容
  • docker exec -it 容器ID /bin/bash or docker attach 容器ID:进入当前正在运行的容器
# 测试 -- 方法一
~ % docker exec -it 35267f0fb66e /bin/bash
[root@35267f0fb66e /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@35267f0fb66e /]# ps
  PID TTY          TIME CMD
   15 pts/1    00:00:00 bash
   30 pts/1    00:00:00 ps
[root@35267f0fb66e /]# exit
exit

# 测试 -- 方法二
~ % docker attach 35267f0fb66e
[root@35267f0fb66e /]# exit
exit

二者的区别:

  • exec:进入容器后开启一个新的终端,可以在里面操作(常用)
  • attach:进入容器正在执行的终端,不会启动新的进程
  • docker cp 容器ID:容器内文件路径 主机中目标路径:从容器内拷贝文件到主机上
# 启动该容器
~ % docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS          PORTS     NAMES
35267f0fb66e   centos    "/bin/bash"   4 hours ago   Up 15 minutes             mycentos
~ % docker attach 35267f0fb66e
[root@35267f0fb66e /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@35267f0fb66e /]# cd home
[root@35267f0fb66e home]# ls
# 在容器内创建一个文件
[root@35267f0fb66e home]# touch test.java
[root@35267f0fb66e home]# ls
test.java
~ % docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS          PORTS     NAMES
35267f0fb66e   centos    "/bin/bash"   4 hours ago   Up 16 minutes             mycentos
# 将文件拷贝出来到主机上
~ % docker cp 35267f0fb66e:/home/test.java ~
~ % ls
test.java

注:拷贝过程容器是否启动都能进行,容器ID是不变的。拷贝是一个手动的过程,未来可以使用 -v 卷的方式,同步主机和容器的目录。

  • docker stats 容器ID:查看docker占用内存等信息
# 查看已启用的 CentOS
~ % docker stats 35267f0fb66e
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O     PIDS
35267f0fb66e   mycentos   0.01%     4.836MiB / 3.841GiB   0.12%     1.18kB / 0B   6.35MB / 0B   1

5.5 小结

Docker命令总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值