Docker入门教程

hegangben
2025-05-29 / 0 评论 / 3 阅读 / 正在检测是否收录...

mb8rkyc3.png

0 docker概述
2014年4月9日,Docker1.0发布!
Docker为什么这么火?十分的轻巧
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!(很笨重)
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
虚拟机的缺点:

  • 资源占用多
  • 冗余步骤多
  • 启动慢
  • 容器化技术:(容器化技术不是模拟的一个完整的操作系统)

Docker和虚拟机技术的区别:

传统的虚拟机,可以虚拟出一条硬件,运行一个完整的操作系统,在这个操作系统上安装和运行所需的软件
容器内的应用可以直接运行在宿主 主机的内核中,容器没有自己的内核,也不用虚拟硬件 (轻便)
每个容器是相互隔离的,每个容器内都有属于自己的文件系统,之间互不影响。
Devops:(开发,运维)
1). 应用于更快速的交付和部署

传统:通过大量的帮助文档,安装程序!
Docker:打包镜像发布测试,一键运行!
2). 更便捷的升级和扩缩容

通过使用Docker,部署应用 如同搭积木一样!
3). 更简单的系统运维

使用容器化之后,开发和测试环境是高度一致的
4).更高效的计算资源利用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器,让服务器的性能可以压榨到极致!

1 Docker的安装
直接安装宝塔桌面,在宝塔桌面安装docker
首先看一下,如果没有安装 Docker,那么第一次进入到宝塔面板的 Docker 页面是会提示需要安装的,如图所示,点击对应的按钮即可自动安装,全程不需要我们手动介入。
mb8r0t3d.png

安装好之后,如下图所示,就可以在 Docker 界面的最上面看到管理菜单栏,包括快速部署项目、容器、项目、项目模板、镜像、网络、存储卷、仓库、设置等。这些如果对 Docker 比较熟悉的朋友应该都知道怎么使用,如果对 Docker 不熟悉的话建议先熟悉一下。
mb8r16um.png

如果安装docker 镜像没有反应,提示Error Get "https://registry-1.docker.io/v2/":
参考:http://www.bennyhe.cn/admin/write-post.php

2 底层原理
docker是怎么工作的?
Docker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上。
通过Socket从客户端访问!
DockerServer 接收到Docker-Client的指令,就会执行这个命令!
mb8r8sph.png
docker为什么比VM(虚拟机)快?
Docker有着比虚拟机更少的抽象层。
docker利用的是宿主机的内核,vm需要是Guest OS。
mb8r95j1.png
新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。
虚拟机是加载GuestOS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!

3 docker 使用
(1)hello-world 测试docker 是否正常
mb8r6olx.png

有可能是需要sudo 获取root权限
mb8r7g89.png

(2)帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令

帮助文档的地址:Reference documentation | Docker Documentation

()3镜像命令
docker images
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
// 命令参数可选项
-a, --all # 显示所有镜像 (docker images -a)
-q, --quiet # 仅显示镜像id (docker images -q)
mb8rbmbo.png
docker search(搜索镜像)
mb8rbx7n.png

解释:

命令参数可选项 (通过搜索来过滤)
--filter=STARS=3000 # 搜索出来的镜像就是stars大于3000的
mb8rc28w.png

docker pull(下载镜像)

# 下载镜像:docker pull 镜像名[:tag]
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql
Using default tag: latest            # 如果不写tag,默认就是latest,最新的版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete            # 分层下载,docker image的核心,联合文件下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest        # 真实地址
# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists        # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi(删除镜像)
mb8rdrqw.png

容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos 镜像来测试学习。

docker pull centos

docker run [可选参数] image
# 参数说明
--name="name"        容器名字:用来区分容器
-d                    后台方式运行:相当于nohup
-it                    使用交互式运行:进入容器查看内容
-p                    指定容器的端口(四种方式)小写字母p
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
    容器端口
-P                     随机指定端口(大写字母P)
# 测试:启动并进入容器
[root@JWei_0124 module]# docker run -it centos /bin/bash
[root@f8fad61a6c96 /]# ls  # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器中退回到主机
[root@f8fad61a6c96 /]# exit
exit
[root@JWei_0124 module]# 
[root@JWei_0124 /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  www

列出所有运行的容器

docker ps    # 列出当前正在运行的容器
# 命令参数可选项
-a        # 列出当前正在运行的容器+历史运行过的容器
-n=?    # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q        # 只显示容器的编号

[root@JWei_0124 //]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@JWei_0124 //]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
f8fad61a6c96   centos         "/bin/bash"   2 minutes ago   Exited (0) About a minute ago             epic_greider
b4b5e50d9889   centos         "/bin/bash"   2 minutes ago   Exited (0) 2 minutes ago                  suspicious_mendeleev
321c5e25bca9   feb5d9fea6a5   "/hello"      2 hours ago     Exited (0) 2 hours ago                    wonderful_saha
[root@JWei_0124 //]# docker ps -a -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                          PORTS     NAMES
f8fad61a6c96   centos    "/bin/bash"   2 minutes ago   Exited (0) About a minute ago             epic_greider
[root@JWei_0124 //]# 

退出容器

exit        # 容器直接停止,并退出
ctrl+P+Q    # 容器不停止,退出
[root@JWei_0124 //]# docker run -it centos /bin/bash  //交互式进入
[root@68b68a9576e0 /]# [root@JWei_0124 //]#  //按快捷键 自动输入
[root@JWei_0124 //]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
68b68a9576e0   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             peaceful_jemison
[root@JWei_0124 //]# 

删除容器

docker rm 容器id                    # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
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        # 强制停止当前容器

查看容器中进程的信息

# 命令 docker top 容器id 
[root@JWei_0124 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS      NAMES
25eb9d70b2b4   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp   awesome_chatterjee
[root@JWei_0124 ~]# docker top 25eb9d70b2b4
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+            181442              181422              0                   09:47               ?                   00:00:00            redis-server *:6379

查看所以镜像:sudo docker image ls -a
强制删除镜像:sudo docker rmi -f 87fd6d1487ce

        这里的id 时image id
        先要查询运行的id:sudo docker ps
        然后sudo docker stop xxx
        

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/leah126/article/details/131871717

0

评论 (0)

取消