0%

docker安装与使用

描述


Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。


image-20210829115850233

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

docker安装

Docker 要求 CentOS 系统的内核版本高于 3.10 ,使用uname -r来验证你的CentOS 版本是否支持 Docker ;

image-20210829111739879

1
2
3
4
5
6
7
8
使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum update -y
卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

image-20210829111845983

可以查看所有仓库中所有docker版本,并选择特定版本安装;

1
yum list docker-ce --showduplicates | sort

image-20210829111944466

1
2
3
4
5
# docker安装
yum install docker-ce -y #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce -y
# 查看docker安装版本
docker version

image-20210829112038280

1
2
3
# 加入开机自启动
systemctl start docker
systemctl enable docker

image-20210829112114629

1
2
3
# 安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose -k
chmod +x /usr/local/bin/docker-compose

docker使用

查看docker镜像

1
docker images

image-20210829112242182

查看所有docker容器id

1
docker ps

image-20210829112321560

查看当前所有运行中的docker

1
docker ps -a

image-20210830114420015

运行一个容器

1
2
3
4
5
6
7
8
9
10
11
格式:docker start <id>
#例如docker start 5828f5697e25
1. 停止一个容器
格式:docker stop <id>
#例如docker start 5828f5697e25
2. 进入一个运行的容器
格式:docker exec -it <容器id> /bin/bash
#例如docker exec -it 5828f5697e25 /bin/bash
3. 容器端口映射
格式:docker run <容器id> -it -p 5984:5984
#例如:docker run 4138cbdb4df8 -it -p 5984:5984

docker容器内快速更换源

debian(163)

1
2
3
4
5
6
7
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
#更新安装源
apt-get update

ubuntu(aliyun)

1
2
3
4
5
6
7
8
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
#更新安装源
apt-get update

Docker镜像命令

1
2
3
4
5
6
7
docker search ubuntu	#查找镜像
docker pull ubuntu #拉取镜像(就是下载)
docker images #查看所有Docker镜像
docker history #查看镜像历史(有哪些层)
docker system df #查看镜像、容器、数据卷所占用的空间
docker rmi -f id #删除镜像
docker rmi -f `docker images -q` #删除全部镜像

Docker容器命令

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样

镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 [命名空间]

因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间

容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker ps			#查看所有启动的容器(若查看所有的容器包括已经关闭,添加-a参数即可)
docker inspect ID #查看容器信息(数据卷等 -> "Mounts")
docker stats ID #查看Docker状态
docker logs ID #查看容器日志(报错和命令)

docker run -it -d --name ubuntu_wintrysec -p 8088:80 ubuntu
#运行Docker镜像
#-d 守护态运行,不直接把执行命令的结果输出在当前宿主机下
#--name参数为自定义容器名
#-p参数为指定端口映射、后者为容器的端口(我们访问Docker的宿主机8080端口)
#成功后台运行后会返回一个容器的id,只需要记住前两位即可

docker exec -it ID bash
#进入一个正在运行的容器的shell,容器id前4位就行,或者容器名也行

exit #退出容器
docker stop ID #停止容器运行,写容器名也行,start是开启
docker rm ID #删除容器
docker rm `docker ps -a -q` #删除所有已经关闭的容器,-f能把正在运行的也关闭

docker stop `docker ps -aq` #停止所有容器
docker rm `docker ps -aq` #删除所有容器

欢迎关注我的其它发布渠道