Docker的安装部署
# linux3.10的内核存在Bug建议升级内核
[root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.167-1.el7.elrepo.x86_64.rpm
[root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.167-1.el7.elrepo.x86_64.rpm
# 安装
[root@localhost ~]# yum localinstall -y kernel-lt*
# 启动时自动选择最新的系统版本
[root@localhost ~]# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
# 查看最新的系统内核启动版本
[root@localhost ~]# grubby --default-kernel
# 重启生效
[root@localhost ~]# reboot
# 检测
[root@localhost ~]# uname -a
# 安装依赖包
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
使用阿里镜像源安装:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.31291b11fDsKl1
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务并检查
systemctl start docker
docker info
# 使用阿里云免费加速docker加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ovqow3xq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2、docker的基础使用
# docker中的容器就像是实际操作系统中单独隔离起来的一部分进程在这个单独隔离的空间中会创建一个新的环境提供给使用
# docker中的三大概念
镜像: 是启动容器的模板
容器: 是对外提供服务的实例
仓库: 存放镜像的地方
# 1、镜像:镜像是启动容器的模板,同一个镜像启动的所有容器相同
# 查看本机的镜像列表:docker images/image ls
# 拉取镜像:docker pull [仓库URL]/[命名空间]/[镜像名称]:[版本号],也可不需要指定仓库url以及名称空间
[root@localhost /]# docker pull nginx
# 查看镜像详情:docker inspect [镜像名称|镜像ID]
[root@localhost /]# docker inspect nginx
# 给镜像添加一个新的标签,但是新产生标签的镜像和原来镜像并没有什么不同
[root@localhost /]# docker tag nginx mynginx
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynginx latest f6987c8d6ed5 6 days ago 141MB
nginx latest f6987c8d6ed5 6 days ago 141MB
# 产生新标签的镜像与原镜像的id一样
# 查找镜像:docker search
[root@localhost /]# docker search httpd # 查找名为httpd的镜像
# 登陆仓库
[root@localhost /]# docker login
# 一次登录后会产生token值会存在 /root/.docker/config.json后续登陆不需要密码
# 上传镜像
# 第一步:将上传的镜像打tag
# 第二步根据tag上传
[root@localhost /]# docker push mynginx
# 删除镜像:docker rmi [镜像名|镜像id]
[root@localhost /]# docker rmi mynginx
# 容器
咋启动容器时容器内至少存在一个进程在系统端运行
# 查看本机运行的容器列表
[root@localhost /]# docker ps
-a : 显示本机上的所有容器
-q :只显示id号
# 容器启动时的常用参数:docker run [参数] [镜像名称|id] [启动命令]
-d : 以守护进程的方式运行
--rm : 当容器的生命周期结束时,自动删除该容器
-e : 指定容器内部环境变量
-h : 指定容器主机名
-t : 打开一个命令行
-i : 指定一个标准输出
-p : 端口映射
-P : 端口随机映射
-v : 添加一个映射目录
[root@localhost /]# docker exec mynginx printenv
[root@localhost /]# docker run -d --rm --name mynginx nginx
# 在创建容器时指定在环境变量中定义一个变量NGINX_NAME
[root@localhost /]# docker run -d --rm --name mynginx1 -e NGINX_NAME=nginxhaha nginx
[root@localhost /]# docker exec mynginx1 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a3f9f1147fa8
NGINX_NAME=nginxhaha
NGINX_VERSION=1.21.4
NJS_VERSION=0.7.0
PKG_RELEASE=1~bullseye
HOME=/root
# 创建一个容器并指定主机名
[root@localhost /]# docker run -d --rm --name mynginx2 -h nginxhost nginx
[root@localhost /]# docker exec mynginx2 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginxhost
NGINX_VERSION=1.21.4
NJS_VERSION=0.7.0
PKG_RELEASE=1~bullseye
HOME=/root
# 将docker中运行的nginx的80端口映射到宿主机的2000端口上
[root@localhost /]# docker run -d --rm --name mynginx -p 20000:80 nginx
# 创建一个容器运行nginx并随机一个端口代理nginx服务
[root@localhost /]# docker run -d --rm -P --name mynginx3 nginx
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d2bb744e4a7 nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:4000->80/tcp mynginx3
# 创建一个容器运行nginx随意映射端口代理nginx服务,并把nginx的根目录与本主机的/tmp目录关联
[root@localhost /]# docker run -d --rm -P -v /tmp:/usr/share/nginx/html --name mynginx4 nginx
# 在容器内部执行命令:docker exec [容器名] [容器内执行的东西]
[root@localhost /]# docker exec mynginx printenv
# 进入容器:docker exec -it [容器名] bash
[root@localhost /]# docker exec -it mynginx bash
# 删除容器:docker rm [容器名|id]
参数:-f强制删除
[root@localhost /]# docker rm -f affectionate_mayer
# 按照查询的容器id删除多个容器
[root@localhost /]# docker rm -f $(docker ps -q)
# 停止一个容器:docker stop [容器名|id]
[root@localhost /]# docker stop mynginx
保存容器和镜像
1、直接将容器保存为本地镜像:docker commit
参数:
-a: 作者
-p: 提交时是否暂停容器的运行
-m: 解释信息
[root@localhost /]# docker commit -a 'hctor' -p mynginx4
2、将本地的容器保存镜像压缩包:docker export
参数:-o 指定打包后的文件名
[root@localhost /]# docker export -o nginx3.tar mynginx3
将export压缩的镜像包解压成镜像:docker import
[root@localhost /]# docker import nginx3.tar nginx:v1 #nginx:v1解压后指定镜像名和tag不指定就是None
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 2fdd1a2313e7 37 seconds ago 140MB
<none> <none> 9e8bd47c08e1 About a minute ago 140MB
3、将本地镜像保存为镜像压缩包:docker save
参数:-o 指定打包后的文件名
[root@localhost /]# docker save -o python.tar python
将save打包的镜像解压:docker load
[root@localhost /]# docker load -i python.tar
4、两种不同的解压方式区别:
解压的文件在打包压缩时的方式不一样,load解压的文件内容没有进行删减更全面