目录
1. Docker版本介绍
2. 创建Docker存储库
3. 安装docker软件包
4. Docker命令补全
6.Docker命令介绍
7. Docker镜像管理
7.1 列出本地镜像
7.2 搜索镜像
7.3 下载镜像
7.4 查看镜像
7.5 删除镜像
7.6 导出镜像
7.7 导入镜像
7.8 镜像改名
8. 容器管理
8.1 容器的命令
8.2 启动一个容器
8.3 查看容器信息
8.4 创建容器并放入后台运行
8.5 查看容器元数据信息
8.6 进入容器
8.7 停止容器
8.8 启动被停止的容器
8.9 删除容器
8.10 查询docker容器日志
8.11 用于容器与主机之间的数据拷贝
8.12 docker容器的网络访问(端口映射)
8.13 案例演示
1. Docker版本介绍
Docker 从 17.03 版本之后分为:
CE(Community Edition: 社区版) 功能有限,没有官方技术支持服务。
EE(Enterprise Edition: 企业版)功能全面,提供官方技术支持服务。
docker架构
docker是传统的c/s架构, 客户端和服务端 ,由dockerclinet和dockerserver端组成
2. 创建Docker存储库
以下安装是服务器可以联网环境下进行安装的,如果是在公司内部,一般公司内部服务器是不允许联网操作的,那就需要离线进行安装了,
离线的安装可以参考官方文档或者参考我的上一篇文档 docker离线部署:跳转按钮
官方安装文档:Install Docker Engine on CentOS
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,方便您可以从仓库安装和更新
[root@localhost ~]# yum install -y yum-utils
Docker:使用以下命令来设置稳定的仓库(阿里仓库)
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
3. 安装docker软件包
1). yum源安装
配置yum源
yum install -y yum-utils device-mapper-persistent-data lvm2 #yum管理工具
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加阿里源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #添加官方源
列出docker-ce可安装的版本
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-19.03.9-3.el7 #安装1903版本
systemctl start docker #启动docker
systemctl enable docker #加入开机自启动
docker info #显示 Docker 系统信息,包括镜像和容器数
#查看docker版本信息
[root@localhost ~]# docker --version
Docker version 19.03.9, build 9d988398e7
#参看docker详细版本
[root@localhost ~]# docker version
yum remove docker-ce #卸载Docker方式,删除安装包
rm -rf /var/lib/docker #删除镜像、容器、配置文件等内容:
2) 本地rpm包安装
下载地址https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
注:如果安装的是17版本要下载docker-ce-selinux下载
4. Docker命令补全
Docker 已经安装好了,但是使用 docker 命令时 不能自动补齐,即输入 docker 命令后,按 Tab 键无法列出子命令(或参数)的候选项
yum install -y bash-completion
自动补全:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source /usr/share/bash-completion/completions/docker
[root@docker ~]# docker #Tab 就出来很多命令了
5. 配置镜像加速器
默认情况下镜像从docker hub下载,由于docker hub服务器在国外,由于网络原因镜像下载速度较慢,一般会配置镜像加速器进行下载。
国内镜像加速器有阿里云、网易云、腾讯云、中科大等,本实验配置阿里云镜像加速器,速度较快
配置docker镜像加速器可以加速在国内下载docker官方镜像的速度,国内有不少机构提供了免费的加速器供大家使用:修改守护进程daemon的配置文件,默认通过此修改下载镜像
1、Docker官方的中国镜像加速器:https://registry.docker-cn.com 不用注册
2、中科大的镜像加速器:https://docker.mirrors.ustc.edu.cn/ 不用注册
3、阿里云的镜像加速器:登录阿里云的容器hub服务,镜像加速器那一栏里会为你独立分配一个加速器地址 要注册
4、DaoCloud的镜像加速器:登录DaoCloud的加速器获取脚本,该脚本可以将加速器添加到守护进程的配置文件中 要注册
我用的是阿里云的镜像加速器,阿里云为我独立分配的加速器地址是:https://4wgtxa6q.mirror.aliyuncs.com
我们以阿里镜像加速器为例进行配置:
每个阿里云帐号都有一个独立的镜像加速地址,我们直接就可以进行使用,先登录阿里云,点击控制台找到镜像服务
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yecrjvhh.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload #加载配置文件
sudo systemctl restart docker #重启docker服务
6.Docker命令介绍
查看docker可用命令:
[root@localhost ~]# docker
Docker命令根据Docker官方案例分为以下几种:
Docker环境信息: docker [info|version]
容器生命周期管理:docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
容器操作命令: docker [ps|inspect|top|attach|wait|export|port|rename|stat]
容器rootfs命令: docker [commit|cp|diff]
镜像仓库命令: docker [login|pull|push|search]
本地镜像管理: docker [build|images|rmi|tag|save|import|load]
容器资源管理: docker [volume|network]
系统日志信息: docker [events|history|logs]
7. Docker镜像管理
docker image 获取镜像管理命令
命令 | 作用 |
docker images | 列出本地镜像 |
docker search 镜像名 | 搜索镜像 |
docker pull 镜像名:版本 | 拉取镜像 |
docker rmi 镜像名:版本 | 删除镜像 |
7.1 列出本地镜像
列出本地镜像:docker images
常用选项:
-a :列出本地所有的镜像
-q :只显示镜像ID
[root@localhost ~]# docker images
输出详情介绍:
REPOSITORY 镜像仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小
7.2 搜索镜像
搜索镜像:docker search
常用选项:
--no-trunc :显示完整的镜像描述
[root@localhost ~]# docker search centos
输出详情介绍:
NAME 镜像仓库源的名称
DESCRIPTION 镜像的描述
STARS 点赞数量,表示喜欢的意思
OFFICIAL 是否 docker 官方发布
AUTOMATED 自动构建(表示个人发布)
注意:只有一个名称,没有/分割代表他是官方镜像,选择镜像建议:1.官方2.stars数量多
官网仓库hub.docker.com
7.3 下载镜像
docker pull 镜像名
[root@localhost ~]# docker pull centos:7
7.4 查看镜像
docker images
[root@localhost ~]# docker images
7.5 删除镜像
docker rmi
[root@localhost ~]# docker rmi centos:7
[root@localhost ~]# docker rmi 50fe74b50e0d
提示:删除镜像可以根据镜像名称或者ID删除,如果删除的时候不加版本号,会删除laste最新版本
[root@localhost ~]# docker rmi `docker images -q`
删除所有镜像:
如需删除所有镜像可以配合docker images -q获取所有镜像ID在进行删除
7.6 导出镜像
docker save
docker image save > /opt/nginx.tar.gz nginx #根据容器 ID 将镜像导出成一个文件
docker image save -o /opt/nginx.tar.gz nginx #可以吧多个镜像 打包成tar.gz 导出到opt目录下
7.7 导入镜像
docker load
docker image load -I /opt/nginx.tar.gz 从tar包载入镜像
docker image load < /opt/nginx.tar.gz
7.8 镜像改名
docker image tag 镜像名:镜像版本 新镜像名:新镜像版本
[root@localhost ~]# docker image tag centos:7 centos_bak:7-1
修改镜像名称之后,发现原有的还是存在的,两个服务是一样的,如果删除原有的镜像不影响新的镜像使用
8. 容器管理
8.1 容器的命令
命令 | 作用 |
docker ps | 查看正在运行容器 |
docker ps -a | 查看所有容器 |
docker run 参数 | 创建容器 |
docker exec 容器ID/容器名 | 进入容器 |
docker stop 容器名/容器ID | 停止容器 |
docker rm 容器名/容器ID | 删除容器 |
docker start 容器名/容器ID | 启动被停止的容器 |
docker restart 容器名/容器ID | 重启容器 |
docker kill 容器名/容器ID | 强制停止正在运行的容器(一般不用,除非卡了) |
docker inspect 容器名称 | 查看容器元数据信息 |
--restart=always | 启动容器时设置容器随机自启 |
docker update --restart=always 容器名/容器ID | 容器启动后设置容器随机自启 |
docker logs 容器名/容器ID | 查看容器日志信息 |
创建容器:docker run
常用选项:
·-it :为容器分配一个输入终端
·--name="名称" :为容器指定一个名称
·/bin/bash :在容器内执行bash命令
·exit :退出容器
·-id :后台运行容器,并返回容器ID
·-P :随机端口映射,容器内部端口随机映射到主机的端口
·-p :指定端口映射,格式为:主机(宿主)端口:容器端口
·--dns 8.8.8.8 :指定容器使用的DNS服务器,默认和宿主一致
·-h "名称" :指定容器的hostname
·-e username="ritchie" :设置环境变量
·-m :设置容器使用内存最大值
·--net="bridge" :指定容器的网络连接类型,支持bridge/host/none/container: 四种类型
·--link=[] :添加链接到另一个容器
·--expose=[]: 开放一个端口或一组端口
·--volume , -v :绑定一个数据卷
8.2 启动一个容器
创建容器:docker run 参数
[root@localhost ~]# docker run -it --name=cos1 centos:7 /bin/bash #启动一个名为cos1的容器,并进入容器终端执行 /bin/bash命令
-it :为容器分配一个输入终端
--name="名称" :为容器指定一个名称
/bin/bash :在容器内执行bash命令
8.3 查看容器信息
[root@localhost ~]# docker ps 通过-it创建的容器退出后自动关闭
[root@localhost ~]# docker ps -a 查看所有容器,包括未运行的
[root@localhost ~]# docker container ls -a
[root@localhost ~]# docker ps -a --no-trunc
-a 显示所有
-q只显示id,通常情况下在批量删除时候使用
-l 只显示最新创建的容器
--no-trunc长格式显示所有信息
查看容器元数据信息
[root@localhost ~]# docker inspect cos1
查看容器中的IP
[root@localhost ~]# hostname -I
容器和容器之间是可以ping通的,容器和宿主机之间也是可以ping通的
8.4 创建容器并放入后台运行
[root@localhost ~]# docker run -id --name=cos3 centos:7
-id :后台运行容器,并返回容器ID,放入后台运行的容器退出后不会自动关闭
8.5 查看容器元数据信息
[root@localhost ~]# docker inspect cos2
8.6 进入容器
docker exec -it 容器ID/容器名
[root@localhost ~]# docker exec -it cos3 /bin/bash
exit #退出容器
8.7 停止容器
docker stop 容器名/容器ID
[root@localhost ~]# docker stop cos3
8.8 启动被停止的容器
docker start 容器名/容器ID
[root@localhost ~]# docker start cos3
启动被停止的所有容器:ps -aq 获取所有容器ID
[root@localhost ~]# docker start `docker ps -aq`
8.9 删除容器
docker rm 容器名/容器ID
常用选项: -f 强制删除(无需停止容器)
[root@localhost ~]# docker rm cos2
删除所有容器:
ps -aq 获取所有容器ID
[root@localhost ~]# docker rm -f `docker ps -a -q` #删除所有的容器
8.10 查询docker容器日志
docker logs 容器名 查看容器日志
8.11 用于容器与主机之间的数据拷贝
格式1:docker cp 容器名:目录/文件 宿主机目录 #将容器中文件或目录拷贝到宿主机
格式2:docker cp 宿主机目录/文件 容器名:目录 #将宿主机文件/目录拷贝到容器中
8.12 docker容器的网络访问(端口映射)
[root@localhost ~]# docker run --name nginx -d -p 8080:80 nginx:1.20.2
-p hostPort:containerPort 宿主机端口映射到容器端口(常用)
[root@localhost ~]# docker run --name nginx -d -p 8080:80 nginx:1.20.2
-p ip:hostPort:containerPort 指定宿主机IP映射容器端口(常用)
[root@localhost ~]# docker run --name nginx -d -p 192.168.1.199:8080:80 nginx:1.20.2
-P指定监听所有IP的随机端口映射到容器的端口 随机端口是有端口池取的
[root@localhost ~]# docker run --name nginx -d -P nginx:1.20.2
-p ip::configtainerPort 随机生成一个宿主机端口,生成之后端口就不会变了
[root@localhost ~]# docker run --name nginx -d -p 192.168.1.199::80 nginx:1.20.2
8.13 案例演示
通过Docker部署Nginx的web应用并实现浏览器访问
1)下载nginx镜像
[root@localhost ~]# docker pull nginx:1.20.2
2)创建容器并实现端口映射(默认容器无法被外网访问)
[root@localhost ~]# docker run -d --name=nginx-web --restart=always -p 80:80 nginx:1.20.2
-P :随机端口映射,容器内部端口随机映射到主机的端口
-p :指定端口映射,格式为:宿主机端口:容器端口
--restart=always #容器退出后,自动启动容器(一直)
3)拷贝项目到Nginx的网页目录
docker cp 用于容器与主机之间的数据拷贝
格式1:docker cp 容器名:目录/文件 宿主机目录 #将容器中文件或目录拷贝到宿主机
格式2:docker cp 宿主机目录/文件 容器名:目录 #将宿主机文件/目录拷贝到容器中
4)先创建一个页面
[root@localhost ~]# vim index.html
Hello Word
5)将转页面拷贝到容器中
[root@localhost ~]# docker cp /root/index.html nginx-web:/usr/share/nginx/html
6)进入容器验证
[root@localhost ~]# docker exec -it nginx-web /bin/bash
[root@b35e35bf1ca9:/# cd /usr/share/nginx/html/
7)浏览器访问
http://192.168.1.199:80
Hello Word