Docker入门

虚幻大学 xuhss 427℃ 0评论
文章目录 显示

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

Docker

一.什么是Docker?

百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker官网:http://www.docker.com

二.为什么说Docker是容器化技术?

9042a3672f225741d7b8f97e712a7d8a - Docker入门

  • 容器化技术的特点:
  • 标准化:每个容器都是标准化、可移植的,因为他们直接运行在宿主机的内核上
  • 隔离:容器互相隔离,互不干扰,独立运行
  • 高性能:容器性能开销极低,可以实现分钟级甚至秒级的部署和启动
  • 版本:CE(Community Edition:社区版)和 EE(Enterprise Edition:企业版)

三.Docker 理念

Build,Ship and Run Any App,Anywhere,在任何地方构建、 发布并运行任何应用程序(一次封装,到处运行)

四.Docker 架构

f25bc73ac7c739c4646da632d3b1d7f1 - Docker入门

docker 由三部分组成:

  • Client 客户端
  • docker 主机
  • Registry 镜像仓库服务器

docker daemon:

  • docker 安装后,会以后台运行、守护进程的形式存在
  • images 镜像: 镜像可以用来创建 docker 容器,一个镜像可以创建很多容器
  • containers: 镜像和容器的关系类似面向对象设计中的类和对象, 镜像是容器的模板,容器是基于镜像创建出来的。 容器可以被创建、启动、停止、删除等等。

Registry:

  • 镜像注册服务器 https://hub.docker.com 一个 docker Registry(仓库注册服务器) 中可以包含多个 Repository(仓库); 每个仓库可以包含多个标签/版本(Tag);每个标签对应一个镜像。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式,公开仓库就是 docker 官方仓库,私有仓库是自己搭建的 docker 私服

Client:

  • docker 终端 安装好 docker 中,同时包含了 docker 客户端,客户端负责执行 docker 命令, 发送给 docker 主机中的 docker 守护进程,例如:从仓库下载镜像,通过镜像创 建容器等等

五.CentOS7 安装 docker

(1)安装需要的软件包:

yum install -y yum-utils device-mapper-persistent-data lvm2

(2)设置 docker 下载镜像(推荐用阿里云,一个字:快)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)更新 yum 软件包索引

yum makecache fas

(4)安装 DOCKER CE (社区版)

yum install -y docker-ce docker-ce-cli containerd.io
注意第一次安装可能会出现错误,重新执行一下安装的命令就好了

(5)启动 docker

systemctl start docker # 启动docker
systemctl enable docker # 设置开机自启动

(6)查看版本

docker version
176e49a10b1431b0efccc041f9b98ee8 - Docker入门

(7)docker 卸载,一次执行下面的三行命令

systemctl stop docker
yum remove -y docker-ce
rm -rf /var/lib/docker

六.配置阿里云镜像服务加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ny5dsu6o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

七.Docker 常用命令

(1).Docker 基本命令

  • 版本信息:docker version
    bcac851836b89f01413a1b1b748e6966 - Docker入门
  • 详细信息:docker info
    e4128b637f531438e9efddad40401cbc - Docker入门
  • 帮助文档:docker --help 列出所有的docker命令

(2)Docker服务相关命令

  • 启动Docker服务:systemctl start docker
    25e14d9aba861621e2b37d8dda3be962 - Docker入门
  • 关闭Docker服务:systemctl stop docker
    ab2e96e86f744fb149c77a0674f0b5ae - Docker入门
  • 查看Docker状态:systemctl status docker
    f892a09c1496f8e2e10b30ee3a8c6006 - Docker入门
  • 重启Docker服务:systemctl restart docker
    8f917eb2febdc89ccc51116d6fac6c30 - Docker入门
  • 设置Docker服务跟随虚拟机开机自启:systemctl enable docker
    6301fe51294a85280dbf9d0fb48842d2 - Docker入门
  • 取消Docker服务跟随虚拟机开机自启:systemctl disable docker
    8e5c4e985f42b8997bfd44a47bd5b894 - Docker入门

(3)Docker 镜像命令(docker官方镜像网站)

  • 查看所有的本机镜像:docker images [-q|--no-trunc],-q:查看镜像ID --no-trunc:查看完成的镜像ID
    ce9a8bb45e26b7b69bff1e0ba9cf516f - Docker入门
  • 查找镜像:docker search 镜像名称
    7c9bc9f6a086b69d6c2fc4111155a94c - Docker入门
  • 下载镜像:docker pull 镜像名称:版本号,不加版本号默认是latest最新版
    fd8145b1842cd164738df27573c3cece - Docker入门
  • 删除镜像:docker rmi [-f] 镜像名|镜像ID:版本号,删除指定版本镜像,版本为latest版本号可以省略,[-f]:强制删除
    4327fc449ae3a5a71b6bb98056f9d2bd - Docker入门
  • 批量删除:docker rmi [-f] mysql tomcat redis ,除多个镜像,使用空格间隔不同的镜像名称

我就不演示了

  • 删除全部镜像:docker rmi -f $(docker images -q)

我就不演示了

  • 查看镜像详情:docker inspect 镜像名|镜像ID
    507e109c00483db37934fc8d2e00d1df - Docker入门

(4)容器操作

  • 列出所有正在运行的容器,不包含已停止的容器(容器怎么运行可以看后面):docker ps
    595ce2abafa21828b4ea8de5642b6c30 - Docker入门
  • 列出当前所有已经创建的容器:docker ps [-aq]
    669abf471e8d37368c37a9edd0e02a58 - Docker入门
  • 创建容器:

docker create 镜像名称 # 根据镜像名创建一个容器
713970a6e16a1739b98b5db5fe2a5c3a - Docker入门
500b9a3a5be08c961c24c68036b482ce - Docker入门

docker create --name tomcat1 镜像名称 # 根据镜像创建名为 tomcat1 的容器
10ae6bf654dcda33d0170eeb73891e01 - Docker入门

docker create 镜像 id # 根据镜像 id 新建一个容器
e1006900afeb7572909e73172dadef69 - Docker入门

  • 启动、停止、重启容器:

docker start 容器名|容器ID
800bec63b93bae988272ebeee1cc2b81 - Docker入门

docker stop 容器名|容器ID
e53cab492263e2c51e34dab1dbc9f123 - Docker入门

docker restart 容器名|容器ID
f9bfabd0e346b5691c08bf3e6c65ac48 - Docker入门

docker kill 容器名|容器ID 根据容器名强制停止一个容器

  • 创建并启动容器:docker run --name tomcat2 tomcat
    当本地镜像存在时,相当于 docker create + docker start
    当本地镜像不存在时,相当于 docker pull + docker create + docker start

    c2e1b1de10ef3eec86a668c23e7f795f - Docker入门
  • 删除容器:

docker rm 容器名称 #删除未启动的容器
f770f37f99f1a1b71d78ef75b4201c95 - Docker入门

docker rm -f 容器名称 #强制删除已启动的容器
abd7feb6ad771135a95f19512bb788f3 - Docker入门

docker rm -f $(docker ps -qa) #删除所有容器,包括正在运行的容器
我就不演示了

docker ps -a -q | xargs docker rm #删除所有容器,不包括正在运行的容器
我就不演示了

  • 交互式启动:docker run -it --name qiu 镜像名|镜像ID
    268459620a849ca730a49afadb1a6b2f - Docker入门
  • 进入容器:docker exec -it 容器ID|容器名称 /bin/bash
    02fa83f933c62f9ab24eab7f9a8e6b68 - Docker入门
  • 退出容器:

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

exit #容器停止退出,此时执行

  • 启动守护式容器:docker run -d --name qiu 镜像名|镜像ID

推荐直接使用:docker run -itd --name qiu 镜像名|镜像ID

八.数据卷

(1)什么是数据卷:数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件 系统的形式存在于宿主机中

(2)解决了什么问题?例如:MySQL 容器损坏无法启动,需要删除容器重新创建,那么数据库数据将会丢失

cb352b32095bea4cd5b34af30f85785b - Docker入门

(3)安装centos:7镜像:docker pull centos:7

(4)做一个例子

将宿主机根目录中的 qiu 挂载到容器根目录中的 qiu

(5)挂载数据卷

docker run -itd -v /qiu:/qiu --name myMysql mysql

-v:挂载数据卷格式:
    /宿主机目录(文件):/容器内目录(文件)
    目录必须是绝对路径
    如果目录不存在,
    则自动创建
    可以挂载多个数据卷

a47b7d4a6af4c545cb60002a9a23c140 - Docker入门

(6)查看数据卷是否挂载成功

docker inspect myMysql

ff31c5b79204239ccf2565af5ecb01e6 - Docker入门

(7)数据共享

首先进入容器,在容器的数据卷挂载目录中创建文件并写入内容
然后退出容器,查看宿主机挂载目录,可以看到同步更新的文件

(8)数据的同步

首先停止容器
然后在宿主机修改共享数据 接下来启动前面的容器,
查看共享数据文件,发现数据在容器中同步

(9)数据的持久化

首先删除容器
然后在宿主机修改共享数据
接着重新创建容器并挂载数据卷
发现数据在容器中恢复

(10)一个容器挂载多个数据卷,两个容器挂载同一个数据卷

docker run -it -v /dataVolumeHost31:/dataVolumeContainer31 -v /dataVolumeHost32:/dataVolumeContainer32 --name centos3 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer4 --name centos4 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer5 --name centos5 centos:7

九.应用部署

(1)部署 tomcat

创建并运行tomcat容器
docker run -d -p 8080:8080 -v /docker/tomcat/webapps:/usr/local/tomcat/webapps -v /docker/tomcat/logs:/usr/local/tomcat/logs --name qiu_tomcat tomcat:8.5
3039ff305973f03dc3e2434c3fcf5a9c - Docker入门

准备一个index.html页面,使用 ftp 工具上到 /docker/tomcat/webapps/qbb 中
cf19c7f073006f610dab9ae86f34777e - Docker入门

浏览器访问一下:http://192.168.137.72:8080/qbb/
ffb6ce5d97ed6a88f275de090eb9e8bb - Docker入门

也可以查看一下tomcat的日志:docker logs -tf --tail 20 atguigu_tomcat

(2)部署MySQL

docker run -d -p 3306:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name atguigu_mysql mysql:5.7
80e84a2a8c03a60272f96a75f1bea42a - Docker入门

十.docker 容器化技术和虚拟机技术

c3f6d8d2144dc8e70aa3d763c1377155 - Docker入门

十一.镜像制作

(1)方式一:通过容器制作镜像

①生成镜像

docker commit 容器名 镜像名称:版本号

②压缩镜像

docker save -o 压缩文件名称 镜像名称:版本号

③还原镜像

docker load -i 压缩文件名称

(2)做一个例子:我们将前面tomcat制作成一个镜像然后部署运行

①将虚拟机的/docker/tomcat/webapps/qbb copy到 qiu_tomcat这个容器下的/usr/local/tomcat/webapps/ROOT目录

docker cp /docker/tomcat/webapps/qbb qiu_tomcat:/usr/local/tomcat/webapps/ROOT

②进入容器:docker exec -it qiu_tomcat /bin/bash,查看index.html是否赋值付过来了

4d78bf7d83b255f8b4bc1915a0b08407 - Docker入门

③浏览器访问一下:http://192.168.137.72:8080/

6e55b596b182487a8694f153bab1af98 - Docker入门

④生成镜像;注意:要先退出容器(exit)

docker commit -a "qiuqiu" -m "create image from container" qiu\_tomcat qbb/mytomcat:1.0
364854a90a9ebdc7882f7d1dc4550ccb - Docker入门

⑤压缩镜像

县创建/opt/docker目录

mkdir -p /opt/docker

执行压缩命令

docker save -o /opt/docker/qbb_mytomcat_v1.0 qbb/mytomcat:1.0

a326a888066acddc1d8a87da0e7563b0 - Docker入门

⑥还原镜像

我们先删除原来的镜像和容器

docker rm -f qiu_tomcat
docker rmi 9ddc19a406d0
9354b78ba80262795433c027417c0531 - Docker入门

由压缩程序还原出镜像文件

docker load -i /opt/docker/qbb_mytomcat_v1.0
83e8e415ddcf9f16429ada42b9207c2a - Docker入门

一键部署

docker run -d -p 8080:8080 --name mytomcat qbb/mytomcat:1.0
1880c60777e059ba128fcffefb4245d8 - Docker入门

6e55b596b182487a8694f153bab1af98 - Docker入门

转载请注明:xuhss » Docker入门

喜欢 (0)

您必须 登录 才能发表评论!