Docker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AtNgiUS8-1634697398686)(Docker.assets/image-20200606203315597.png)]
参考资料
官方文档:https://docs.docker.com/docker-for-windows/
【官方文档超级详细】
仓库地址:https://hub.docker.com/
【发布到仓库,git pull push】
b站教程:https://www.bilibili.com/video/BV1og4y1q7M4?
【这个教程非常简洁!且深入!基于企业应用场景!推荐!以下笔记都基于该课程】
前期基础
linux基本命令,类似cd,mkdir等
Docker概述
Docker为什么会出现
一款产品,开发和上线两套环境,应用环境配置费时费力,而且容易出问题
尤其对于机器学习和深度学习的库更是如此,很可能存在版本问题、底层依赖冲突问题
所以发布项目时,不只是一套代码过去,而是代码+环境整体打包过去
所谓开发即运维,保证系统稳定性,提高部署效率
使用Docker后的流程:
开发:建立模型–环境–打包带上环境,即镜像–放到Docker仓库
部署:下载Docker中的镜像,直接运行即可
Docker的思想来自于集装箱,集装箱,对环境进行隔离
Docker通过隔离机制,可以将服务器利用到极致。
Docker的历史
2010年,几个搞IT的人,在美国成立一家公司dotCloud
做一些pass的云计算服务
他们将自己的容器化技术命名为Docker
Docker基于Go语言开发
Docker刚刚诞生的时候,没有引起行业的注意,dotCloud活不下去
然后他们决定开源
2013年,创始人将Docker开源,不开则以,一开惊人,刚开源的时候,每个月都会更新一个版本
2014年4月9日,Docker 1.0发布
容器vs虚拟机
在容器技术出来之前,用的是虚拟机技术
虚拟机原理示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJuKpig2-1634697398690)(Docker.assets/image-20200606205436434.png)]
缺点:
- 资源占用多
- 冗余步骤多
- 启动很慢
容器化技术示意图
不是模拟的完整的操作系统
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnuIuzgr-1634697398693)(Docker.assets/image-20200606205739655.png)]
二者对比
比较虚拟机和Docker的不同
传统虚拟机 | Docker | |
---|---|---|
虚拟内容 | 硬件+完整的操作系统+软件 | APP+LIB |
大小 | 笨重,通常几个G | 轻便几个M或KB |
启动速度 | 慢,分钟级 | 快,秒级 |
Docker安装
Docker的基本组成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MozSn46F-1634697398696)(Docker.assets/image-20200606212250845.png)]
明确几个概念:
-
镜像(image):docker镜像好比一个模板,可以通过这个模板来创建容器(container),一个镜像可以创建多个容器,类似Python中的Class
-
容器(container):类似Python中通过Class创建的实例,Object;容器可以理解为一个简易的系统
-
仓库(repository):存放镜像的地方,
分为共有仓库和私有仓库
-
Docker Hub:国外的
-
阿里云:配置镜像加速
-
环境准备
我们要有一台服务器,并且可以操作它
- Linux命令基础,购买linux阿里云的服务器
- CentOS 7
- 使用Xshell链接远程服务器
安装xshell
下载CentOS7 https://www.jianshu.com/p/a63f47e096e8
下载VMware 360软件管家下载
VMware配置虚拟机 https://blog.csdn.net/babyxue/article/details/80970526
xshell链接服务器 https://blog.csdn.net/zzy1078689276/article/details/77280814
[root@192 ~]# cd /
[root@192 /]# pwd
/
[root@192 /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@192 /]# uname -r
3.10.0-1127.el7.x86_64
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRKCXPrK-1634697398698)(Docker.assets/image-20200608091950655.png)]
用户名
密码
查看ip:vmware里面输入,ip addIPr
视频书签,p602:20
https://www.bilibili.com/video/BV1og4y1q7M4?p=6
Centos安装
https://docs.docker.com/engine/install/centos/
卸载旧的版本
# 卸载旧的版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bv6z7jk-1634697398700)(Docker.assets/image-20200608092628498.png)]
安装基本环境
# 安装基本的安装包
$ sudo yum install -y yum-utils
!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOuxbp6b-1634697398702)(Docker.assets/image-20200608093114774.png)]
设置镜像的仓库
注意!!下载默认用国外的,太慢不要用!
用国内镜像,百度搜索,docker的阿里云镜像地址
# 不要用官网默认这个!
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
# 换成下面的
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VF0xqNjr-1634697398704)(Docker.assets/image-20200616145430166.png)]
直接复制粘贴就OK了
更像软件包索引
yum makecache fast
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqW1LE3G-1634697398705)(Docker.assets/image-20200616150014082.png)]
没有问题的话就是可以用的
安装docker引擎
yum install docker-ce docker-ce-cli containerd.io # docker-ce 社区版 ee 企业版
注意这里会有几个个y/n的判断
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTrgSBeW-1634697398706)(Docker.assets/image-20200616150818860.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q6jJC6U0-1634697398707)(Docker.assets/image-20200616150922549.png)]
要看到Complet再收手!
启动Docker
systemctl start docker # 代表启动成功
docker version
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:13:48 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:26 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker run hello-world
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58SS4fw7-1634697398708)(Docker.assets/image-20200616151641013.png)]
中间一堆是签名信息
run的运行流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhNl8d62-1634697398714)(Docker.assets/image-20200616161441669.png)]
查看下载的镜像
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMC8FY5p-1634697398716)(Docker.assets/image-20200616151913277.png)]
卸载Docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker # docker 的默认工作路径
阿里云镜像加速
支付宝扫码登录,短信验证,确认授权
我有两个问题
-
阿里云镜像加速必须配置嘛?
哎呦我去: 加速快
哎呦我去: 要是翻墙就无所谓了
-
这个阿里云必须要买嘛,买哪个,我看阿里云好多产品
哎呦我去:不需要买
哎呦我去:免费的
哎呦我去:阿里云搜索容器服务
哎呦我去:有一个镜像加速
-
这个地址是哪来的呀
操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anODsELC-1634697398717)(Docker.assets/image-20200616154429105.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MyvwVTO-1634697398718)(Docker.assets/image-20200616154455964.png)]
控制台搜索 容器镜像服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TqtgJiyP-1634697398719)(Docker.assets/image-20200616155201285.png)]
找到加速地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHZSM5WD-1634697398720)(Docker.assets/image-20200616155649476.png)]
sudo mkdir -p /etc/docker # 创建一个陌路
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uyfgafsw.mirror.aliyuncs.com"]
}
EOF # 编写配置文件
sudo systemctl daemon-reload # 重启服务
sudo systemctl restart docker # 重启docker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3URqEOOX-1634697398721)(Docker.assets/image-20200616160315298.png)]
底层原理
Docker是真么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程在主机上。通过Socket从客户端访问!
DockerServer接受到Docker-Client的指令,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lO3bFlVj-1634697398722)(Docker.assets/image-20200616162107363.png)]
Docker为什么比VM快?
- Docker有着比虚拟机更少的抽象层
- docker主要用的是宿主机的内核,vm需要Guest OS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWG2lHoX-1634697398722)(Docker.assets/image-20200616162302653.png)]
所以说新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导
Docker命令
帮助命令
docker version # 显示docker的基本信息
docker info # 系统信息,镜像和容器的数量
docker 命令 --help # 全部信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tx7KTIU1-1634697398723)(Docker.assets/image-20200616163338187.png)]
镜像命令
docker images
查看所有本地主机上的镜像
[root@192 ~]# docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9f6TUou-1634697398724)(Docker.assets/image-20200616172056530.png)]
# 解释
REPOSITORY # 镜像仓库源
TAG # 镜像的标签
IMAGE ID # 镜像的ID
CREATED # 镜像的创建时间
SIZE # 镜像的大小
--all , -a Show all images (default hides intermediate images) # 显示所有
--digests Show digests
--filter , -f Filter output based on conditions provided
--format Pretty-print images using a Go template
--no-trunc Don’t truncate output
--quiet , -q Only show numeric IDs # 只显示id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2ihm8vE-1634697398724)(Docker.assets/image-20200616172651835.png)]
docker search
搜索仓库中的镜像,相当于网页搜索
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjqFo7DI-1634697398725)(Docker.assets/image-20200616173009473.png)]
mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XyjD9q0p-1634697398726)(Docker.assets/image-20200616173050756.png)]
docker search mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vW7NuezO-1634697398726)(Docker.assets/image-20200616173308194.png)]
docker search --help
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g44PhuxA-1634697398727)(Docker.assets/image-20200616173740981.png)]
# 解释
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
docker search mysql --filter=STARS=3000 # 搜索出Stars大于3000的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xa5NHKTM-1634697398728)(Docker.assets/image-20200616174440284.png)]
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=9,13:44,太热了我要缓一缓】
【20200616拳击课回来,好爽,赶紧把这个命令熟悉完】
docker pull
下载镜像
docker pull mysql # 下载mysql镜像,default tag,默认最新版latest
[root@192 ~]# sudo systemctl daemon-reload
[root@192 ~]# sudo systemctl restart docker
[root@192 ~]# docker pull mysql
Using default tag: latest # 不写tag默认最新版
latest: Pulling from library/mysql
8559a31e96f4: Pull complete # layer 分层下载,docker image的核心 联合文件系统
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
c75914a65ca2: Pull complete
1ae8042bdd09: Pull complete
453ac13c00a3: Pull complete
9e680cd72f08: Pull complete
a6b5dc864b6c: Pull complete
Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 即
docker pull mysql
# 等价于
docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
版本来自于官网,版本库https://hub.docker.com/_/mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyQ5dc6N-1634697398729)(Docker.assets/image-20200617094339687.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rovwWM79-1634697398730)(Docker.assets/image-20200617100948088.png)]
docker images
此时查看镜像,可以看到新下载的两个
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQpHBBEp-1634697398731)(Docker.assets/image-20200617101105899.png)]
docker rmi
remove images
# 删除一个 可以通过名称 也可以指定id -f表示删除所有
docker rmi -f 9cfcce23593a
# 删除多个 用空格分隔id
docker rmi -f id id id
# 删除所有
docker rmi -f $(docker images -aq) # images -aq就是查所有镜像id,从而递归删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xJ1CcdT-1634697398732)(Docker.assets/image-20200617102049613.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuluJP0I-1634697398733)(Docker.assets/image-20200617102126526.png)]
容器命令
说明:有了镜像才能创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyaBEUsS-1634697398733)(Docker.assets/image-20200617103406974.png)]
新建容器并启动
docker run [可选参数] image
# 参数说明
--name=“Name” # 容器名字,用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 如-p 8080::8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-p 随机指定端口
进入退出容器
# 进入
docker run -it centos /bin/bash
# 查看目录
ls
# 退出
exit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSCn5TkM-1634697398734)(Docker.assets/image-20200617104004004.png)]
注意这里面主机名,编程了centos的id
这里面就是一个容器,套娃啊
查看运行的容器
# 查看正在运行的容器
docker ps
# 查看曾经运行的容器
docker ps -a
# 显示最近创建的容器,设置显示个数
docker ps -a - n=?
# 只显示容器的编号
docker ps -aq
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9939864fa2e6 centos "bin/bash" 4 minutes ago Exited (0) 4 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 8 minutes ago Exited (0) 4 minutes ago lucid_cannon
a89ddb393d3d bf756fb1ae65 "/hello" 19 hours ago Exited (0) 19 hours ago gracious_bhabha
[root@192 ~]# docker ps -a -n=2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9939864fa2e6 centos "bin/bash" 6 minutes ago Exited (0) 6 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago
[root@192 ~]# docker ps -aq
9939864fa2e6
5f42e9930435
a89ddb393d3d
退出容器
# 容器停止退出
exit
# 容器不停止退出 注意必须在英文输入法下,中文输入法不行
Ctrl + P + Q
[root@192 ~]# docker run -it centos /bin/bash
[root@bfcea13c40cd /]# [root@192 ~]# docker ps ##注意这里会自动给个命令,删掉
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" About a minute ago Up About a minute stoic_wilson
edbd9366d959 centos "/bin/bash" 7 minutes ago Up 7 minutes affectionate_bartik
[root@192 ~]# docker exec -it edbd9366d959 /bin/bash ## 再次进入
[root@edbd9366d959 /]# exit ##停止并推出
exit
删除容器
# 删除指定容器 不能删除正在运行的容器,如果强制删除 rm -f
docker rm 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有容器
docker ps -a -q|xargs docker rm
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" 29 minutes ago Up 29 minutes stoic_wilson
edbd9366d959 centos "/bin/bash" 35 minutes ago Up 35 minutes