Bootstrap

Docker安装到使用

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)]

缺点:

  1. 资源占用多
  2. 冗余步骤多
  3. 启动很慢
容器化技术示意图

不是模拟的完整的操作系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

明确几个概念:

  1. 镜像(image):docker镜像好比一个模板,可以通过这个模板来创建容器(container),一个镜像可以创建多个容器,类似Python中的Class

  2. 容器(container):类似Python中通过Class创建的实例,Object;容器可以理解为一个简易的系统

  3. 仓库(repository):存放镜像的地方,

    分为共有仓库和私有仓库

    • Docker Hub:国外的

    • 阿里云:配置镜像加速

环境准备

我们要有一台服务器,并且可以操作它

  1. Linux命令基础,购买linux阿里云的服务器
  2. CentOS 7
  3. 使用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 的默认工作路径

阿里云镜像加速

支付宝扫码登录,短信验证,确认授权

我有两个问题

  1. 阿里云镜像加速必须配置嘛?

    哎呦我去: 加速快

    哎呦我去: 要是翻墙就无所谓了

  2. 这个阿里云必须要买嘛,买哪个,我看阿里云好多产品

    哎呦我去:不需要买

    哎呦我去:免费的

    哎呦我去:阿里云搜索容器服务

    哎呦我去:有一个镜像加速

  3. 这个地址是哪来的呀

操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

在线画图软件ProcessOn

服务器及购买相关介绍

底层原理

Docker是真么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程在主机上。通过Socket从客户端访问!

DockerServer接受到Docker-Client的指令,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lO3bFlVj-1634697398722)(Docker.assets/image-20200616162107363.png)]

Docker为什么比VM快?

  1. Docker有着比虚拟机更少的抽象层
  2. 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                                 
;