Docker

Docker的三大核心概念:镜像、容器、仓库

1.镜像:类似虚拟机的镜像、用俗话说就是安装文件。

2.容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。

3.仓库:类似代码仓库,是Docker集中存放镜像文件的场所。
Docker 支持以下的 64 位 CentOS 版本

  • CentOS 7
  • CentOS 8
  • 更高版本...

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone app),更重要的是容器性能开销极低。

一、安装

官方一键脚本

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

国内daocloud一键命令

curl -sSL https://get.daocloud.io/docker | sh

 

手动安装

1.把yum包更新到最新

sudo yum update

2.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的。

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

3.设置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4.查看仓库中docker版本

yum list docker-ce --showduplicates | sort -r

5.安装docker

sudo yum install docker-ce

 

操作命令

$ sudo systemctl start docker     #启动
$ sudo systemctl enable docker    #开机启动
$ sudo systemctl stop docker      #停止
$ docker version                  #查看版本
$ systemctl status docker.service #查看状态

 

卸载Docker

1.查询安装过的包

yum list installed | grep docker

2.如本机安装过旧版本

docker.x86_64,docker-client.x86_64,docker-common.x86_64

3.删除安装的软件包

yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64

4.较旧的Docker版本称为 dockerdocker-engine 如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 

GUI管理

推荐使用Portainer作为容器的GUI管理方案。官方地址:https://portainer.io/install.html
安装命令如下,安装完成后访问你的 IP:9000 即可进入容器管理页面。

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

web管理界面

 

二、镜像加速

有些镜像在国内拉取速度极其慢,慢到令人发指的程度。创建或修改 /etc/docker/daemon.json 文件,修改为如下形式

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

 

其他加速地址

1.Docker中国区官方镜像
https://registry.docker-cn.com

2.网易
http://hub-mirror.c.163.com

3.ustc
https://docker.mirrors.ustc.edu.cn

4.中国科技大学
https://docker.mirrors.ustc.edu.cn

 

其他加速方法

阿里云容器 生成自己的加速地址
登录:https://cr.console.aliyun.com “创建我的容器镜像”,得到专属加速地址

加载重启docker

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

查看是否成功

$ docker info

 

三、操作命令

1.创建容器

docker create -it boke-oraclexe:1.0

# 创建临时容器,退出后不再存在,常用于排错

docker run -it --rm boke-mysql5.5:1.1 bash

2.查看容器

docker ps -a

docker ps -a -q # 查看哪些是停止状态的容器

3.启动容器

docker start 容器ID

4.创建启动容器

docker run 

实例

1.使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx

docker run --name mynginx -d nginx:latest

2.使用镜像nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data

docker run -p 80:80 -v /data:/data -d nginx:latest

3.绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.180 端口上。

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用docker run命令创建启动容器时,Docker在后台运行的标准操作有下面几个步骤

  • 检测本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
  • 从地址池配置一个IP地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后终止容器

5.停止容器

# 运行中的容器status 为 up

# 停止中的容器status 为exit

docker stop 容器ID

6.进入容器

几种方式 1.docker attach 命令、2.docker exec 命令、3.nsenter工具,这里就说两种

attach命令

docker attach 容器ID

docker attach是一个Docker自带的命令,下面来说说attach命令的使用方法:其实使用docker attach命令有时候很不方便,当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个窗口因命令阻塞的时候,其他窗口也无法执行操作了。

exec命令

docker exec -ti 容器ID /bin/bash

Docker1.3版本开始,提供了一个更方便的命令exec。可以直接在容器内运行命令

7.删除容器

删除容器我们可以使用docker rm命令,被删除的容器需要是终止状态

命令用法:docker rm [OPTIONS] CONTAINER [CONTINER...]支持的参数有-f -l -v

  • -f --force=false:强项终止并删除一个运行中的容器。
  • -l --link=false:删除容器的连接,但保留容器。
  • -v --volumes=false:删除容器挂载的数据卷。

实例

1.强制删除容器 db01、db02

docker rm -f db01 db02

2.移除容器 nginx01 对容器db01 的连接,连接名 db

docker rm -l db

3.删除容器 nginx01, 并删除容器挂载的数据卷

docker rm -v nginx01

4.删除所有已经停止的容器

docker rm $(docker ps -a -q)

8.容器迁移

导出 docker export 容器ID

导入docker import 容器ID

9.从容器里面拷文件到宿主机或从宿主机拷文件到容器

从容器里面拷文件到宿主机

在宿主机里面执行命令:(docker cp 容器名)要拷贝的文件在容器里面的路径要拷贝到宿主机的相应路径
示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下

示例:docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

从宿主机拷文件到容器里面

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下

示例:docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

10.镜像管理

1.列出本机已有的镜像

$ docker images

红色标注的字段释义

  • REPOSITORY: 来自于哪个仓库;
  • TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;
  • IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了;
  • CREATED: 镜像最后的更新时间;
  • SIZE: 镜像的大小

 
2.删除镜像

docker rmi    #镜像ID
docker rmi -f #镜像ID,强制删除,不管有没有容器在使用
Last modification:June 19, 2021
如果你想请我喝奶茶的话