一、docker容器化技术
1、docker容器安装部署
1.1、Docker安装
[root@root ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 git
[root@root ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@root ~]# yum install docker-ce -y
以上是安装最新版本,如果需要指定版本安装,见下面命令:
查看docker版本:
[root@root ~]# yum list docker-ce --showduplicates
指定版本安装:
[root@root ~]# yum install docker-ce-20.10.2.ce -y
启动服务并做开机启动:
[root@root ~]# systemctl enable docker
[root@root ~]# systemctl start docker
上面为自己docker.hub正常访问状态,如果上面安装不上,用一下步骤
# 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服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
1.2、Docker查看
[root@test-cloud-clone ~]# docker -v
Docker version 26.1.4, build 5650f9b
1.3、Docker状态
[root@c7 tmp]# docker info
Client: Docker Engine - Community
Version: 26.1.4 ## 容器的版本号
Context: default ## 使用的默认上下文为default
Debug Mode: false ## 关闭调试模式
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.1 ## Docker Buildx插件的版本v0.14.1 路径是 /usr/libexec/docker/cli-plugins/docker-buildx
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.27.1 ## compose: Docker Compose 插件版本 v2.27.1,路径 /usr/libexec/docker/cli-plugins/docker-compose。
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 10 ## 总数: 10
Running: 4 ## 运行中: 4
Paused: 0 ## 暂停: 0
Stopped: 6 ## 已停止: 6
Images: 9 ## 本地存储的镜像总数为 9。
Server Version: 26.1.4 ## Docker 服务器版本 26.1.4。
Storage Driver: overlay2 ## 使用的存储驱动为 overlay2
Backing Filesystem: xfs ## 文件系统为 xfs。
Supports d_type: true ## 支持 d_type。
Using metacopy: false ## 未使用 metacopy。
Native Overlay Diff: true ## 启用原生 overlay 差分。
userxattr: false ## 不支持 userxattr。
Logging Driver: json-file ## 日志记录驱动为 json-file。
Cgroup Driver: cgroupfs ## 控制组驱动为 cgroupfs。
Cgroup Version: 1 ## 控制组版本为 1。
Plugins:
Volume: local ## 支持 local 类型的卷
Network: bridge host ipvlan macvlan null overlay ## 支持多种网络驱动,包括 bridge, host, ipvlan, macvlan, null, overlay。
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog ## 支持多种日志驱动,包括 awslogs, fluentd, gcplogs, gelf, journald, json-file, local, splunk, syslog。
Swarm: inactive ## 当前未激活 Swarm 模式。
Runtimes: io.containerd.runc.v2 runc ## 支持的运行时有 io.containerd.runc.v2 和 runc。
Default Runtime: runc ## 默认运行时为 runc。
Init Binary: docker-init ## 初始化二进制程序为 docker-init。
containerd version: d2d58213f83a351ca8f528a95fbd145f5654e957 ## containerd 版本 d2d58213f83a351ca8f528a95fbd145f5654e957。
runc version: v1.1.12-0-g51d5e94 ## runc 版本 v1.1.12-0-g51d5e94。
init version: de40ad0 ## init 版本 de40ad0。
Security Options:
seccomp ## 使用内置的 seccomp 配置文件
Profile: builtin
Kernel Version: 3.10.0-1160.el7.x86_64 ## 内核版本 3.10.0-1160.el7.x86_64。
Operating System: CentOS Linux 7 (Core) ## 操作系统为 CentOS Linux 7 (Core)。
OSType: linux ## 操作系统类型为 linux。
Architecture: x86_64 ## 架构为 x86_64。
CPUs: 2 ## 可用 CPU 数量为 2。
Total Memory: 1.777GiB ## 总内存为 1.777GiB。
Name: c7 ## 主机名 c7。
ID: 0dc590ca-ae8c-43f3-8968-633f73925e10 ## 主机唯一标识符 0dc590ca-ae8c-43f3-8968-633f73925e10。
Docker Root Dir: /var/lib/docker ## Docker 根目录为 /var/lib/docker。
Debug Mode: false ## 关闭调试模式。
Experimental: false ## 未启用实验性功能。
Insecure Registries: ## 不安全的仓库列表包含 127.0.0.0/8。
127.0.0.0/8
Live Restore Enabled: false ## 实时恢复功能未启用。
2.docker三大组件
2.1、Docker images 镜像
docker pull 拉取镜像
docker images 查看镜像
docker rmi 删除镜像
docker inspect 镜像详情信息
2.2、Docker registeries 仓库
docker pull 镜像名字 拉取镜像
docker push 镜像名字 上传镜像
例:
docker push 192.168.17.151:5000/centos:7 注:5000是容器端口(映射到容器宿主机是5000)
报错 The push refers to repository [ 192.168.17.151:5000/centos]
Get “https://192.168.17.151:5000/v2” : http : server gave HTTP response to HTTPS client
报错原因
192.168.17.151是http协议,只有https才可以上传镜像
解决办法 vim /etc/docker/daemon.json
2.3、Docker containers 容器
docker run -v 文件映射,格式为:主机目录:容器目录
-d 后台运行容器,并返回容器id
-i 以交互的方式运行容器,通常和-t同时使用;
-t 为容器重新分配一个伪输入终端,通常与-i同时使用;
-p 端口映射,格式为:主机(宿主)端口:容器端口
--name=“nignx-1”:为容器指定一个名称;
-h “mars”: 指定容器的hostname;
-e username=“ritchie” : 设置环境变量
--restart=always 重新启动docker时候,容器自动启动
docker ps 仅列出正在运行的容器
-a 列出所有容器,包括正在运行的和已停止的容器
docker rm 删除容器(只能是停止的)
--force 强制删除容器
docker stop 停止
docker start 启动
docker restart 重启
docker exec 进入容器
例:数据库
docker run -itd --name mysql -p 8082:3306 -v /mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=‘123456’ daocloud.io/library/mysq:5.7
下载mariadb,yum -y install mariadb
web服务nginx
docker run -itd --name nginx -p 8888:80 -v /web/:/usr/share/nginx/html daocloud.io/library/nginx
两种上线方式
cp -r /目录/* /web/ 文件映射方法
docker cp 文件名/目录名 容器名:路径 直接拷贝到容器里
2.4、docker网络
docker安装后,默认会创建三种网络类型,bridge、host和none
[root@test ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
d52ed56d400a bridge bridge local
1679de3abbb3 host host local
fddf8fdf0ef9 none null local
bridge:网络桥接
默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化
none:无指定网络
启动容器时,可以通过network=none,docker容器不会分配局域网ip 指定ip --network
host:主机网络
docker容器的网络会附属在主机上,两者是互通的
创建ip固定容器
创建自定义网络类型,并且指定网段:
[root@xingdian ~]# docker network create --subnet 192.168.0.0/16 test
通过docker network ls可以查看到网络类型中多了一个test
使用新的网络类型创建并启动容器:
[root@xingdian ~]# docker run -it --name userserver --net test --ip 192.168.0.2 nginx
通过docker inspect可以查看容器ip为192.168.0.2,关闭容器并重启,发现容器ip并未发生改变
删除网络类型
通过docker network ls可以查看到网络类型中多了一个test
使用新的网络类型创建并启动容器:
[root@test ~]# docker run -it --name userserver --net test --ip 192.168.0.2 nginx
通过docker inspect可以查看容器ip为192.168.0.2,关闭容器并重启,发现容器ip并未发生改变
删除网络类型
docker network rm cb12eba0d683