目录
8.12 docker容器的网络访问(端口映射)
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