【工具】Docker的使用

目录

理论

基础操作

在Ubuntu上配置Docker

踩坑

理论

1.容器的概念:容器是对应用程序及其依赖关系的封装,可以看成是一个轻量级的虚拟机环境。

  • 容器能与主机的操作系统共享资源
  • 运行容器开销小,可以大数量多开
  • 容器具有强可移植性,换个电脑也能跑
  • 虚拟机的目的是要完整地模拟另一个环
    境;而容器的目的则是使应用程序能够移植,并把所有依赖关系包含进去(这一点有点像yum)

2.Docker利用的是Linux的容器技术,Docker 平台拥有两个不同部分

  • 负责创建与运行容器的Docker引擎
  • 用来发布容器的云服务Docker Hub

3.Docker工具:

  • 集群管理工具Swarm
  • 用于处理容器的图形用户界面Kitematic,
  • 部署Docker主机的命令行工具Machine。

4.容器使软件应用程序与操作系统脱钩,从而为用户提供了一个干净而最小的Linux环境,同时在一个或多个隔离的“容器”中运行其他所有内容。容器的目的是启动一组有限的应用程序或服务(通常称为微服务),并使它们在独立的沙盒环境中运行

5.docker的组成

  • image(镜像)相当于可执行程序
    • 一个程序需要代码经过编译来生成,dockerfile就是源代码,docker本体起到编译器的作用
    • 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层
    • 删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像
  • container(容器)相当于一个进程
  • Docker Registry就是docker的代码仓库
    • 分为官方的公有库和自己搭建的私有库

6.docker的流程

  • 例如运行一条docker run -p 3306:3306 –name mysql -d mysql的命令
    • docker客户端执行docker run命令
    • docker daemon通过graphdriver去Graph中拉取最新的mysql镜像
    • docker daemon通过networkdriver建立端口映射
    • docker daemon通过execdriver启动容器
  • 注:docker对系统调用的操作由libcontainer实现,可以单独借此来操作防火墙、namespace等

基础操作

1.运行第一个镜像

1
2
3
4
5
docker run debian echo "Hello World"

# docker run是启动容器命令
# 意为docker运行名叫debian的镜像并执行echo "Hello World"操作
# 若本地找不到debian镜像,docker会在Docker Hub自动下载

2.在镜像中使用shell

1
2
3
docker run -i -t debian /bin/bash

# 退出容器中的shell直接运行exit即可

3.用指定主机名“CONTAINER”启动镜像

1
docker run -h CONTAINER -i -t debian /bin/bash

4.查看正在运行的容器信息,会出现容器id和名称(这两个字段都可以用作inspect的参数)

1
2
3
doker ps

# docker ps -a 会显示所有容器

5.显示某容器的详细信息

1
2
3
docker inspect xx

# docker inspect xx1 | grep xx2 会显示容器xx1含有xx2字段的属性

6.显示某容器哪些文件被改动过

1
docker diff xx

7.显示容器中发生的一切操作记录

1
docker logs xx

8.删除容器

1
2
3
docker rm xx

# 常用命令docker rm -v $(docker ps -aq -f status=exited)删除所有已停止的容器

9.从远程服务器拉取镜像

1
docker pull nginx

在Ubuntu上配置Docker

1.安装Docker

  • 更新apt源索引
1
sudo apt-get update
  • 允许apt通过HTTPS使用仓库
1
2
3
4
5
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
  • 添加Docker官方的GPG密钥
    1
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 设置Docker稳定版仓库
    1
    2
    3
    4
    sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
  • 再一次更新apt源索引
    1
    sudo apt-get update
  • 下载安装Docker社区版
    1
    sudo apt-get install docker-ce

2.检查Docker是否配置正确

  • 检查Docker CE是否安装正确
    1
    sudo docker run hello-world
    若出现下述内容则表示安装正确
    1
    2
    3
    4
    5
    6
    7
    8
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    To generate this message, Docker took the following steps:
    1. The Docker client contacted the Docker daemon.
    ......
    For more examples and ideas, visit:
    https://docs.docker.com/get-started/
  • 检查Docker是否可用
    1
    docker version
    若只出现Client配置,则表示权限不正确
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Client: Docker Engine - Community
    Version: 20.10.7
    API version: 1.41
    Go version: go1.13.15
    Git commit: f0df350
    Built: Wed Jun 2 11:56:38 2021
    OS/Arch: linux/amd64
    Context: default
    Experimental: true
    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied
    需输入
    1
    sudo chmod a+rw /var/run/docker.sock
    之后显示以下内容,则表示Docker安装正确并可用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Client: Docker Engine - Community
    Version: 20.10.7
    API version: 1.41
    Go version: go1.13.15
    Git commit: f0df350
    Built: Wed Jun 2 11:56:38 2021
    OS/Arch: linux/amd64
    Context: default
    Experimental: true

    Server: Docker Engine - Community
    Engine:
    Version: 20.10.7
    API version: 1.41 (minimum version 1.12)
    Go version: go1.13.15
    Git commit: b0f5bc3
    Built: Wed Jun 2 11:54:50 2021
    OS/Arch: linux/amd64
    Experimental: false
    containerd:
    Version: 1.4.6
    GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
    runc:
    Version: 1.0.0-rc95
    GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
    docker-init:
    Version: 0.19.0
    GitCommit: de40ad0

踩坑

1.win系统启动docker桌面版失败就去把AppData里面的docker文件夹重命名为docker_backup,再重新启动即可