
docker容器使用
1.docker容器
1:什么是容器?
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等进程:正在运行的程序
2.docker的主要目标
1.docker的主要目标是"
Build,Ship and Run any App,Angwhere",构建,运输,处处运行,一次构建,处处运行,
2.docker是一种软件的打包技术
- 构建:做一个docker镜像
- 运输:docker pull
- 运行:启动一个容器
- 每一个容器,他都有自己的文件系统rootfs.
3.docker的安装
1.卸载旧版
1.检测本机是否存在较老版本的docker检测的命令如下:
[root@docker ~]# rpm -qa docker docker-engine # 注意:如果执行后没有返回代表没有安装旧版本`Docker`则不需要进行后续的操作。2.如果返回后有相关软件包,代表已安装旧版本Docker那么需要卸载该软件包以及相关的依赖包,卸载的命令如下:
[root@docker ~]# yum remove -y docker \ docker-common \ container-selinux \ docker-selinux \ docker-engine \ docker-engine-selinux2.安装Docker容器
Centos安装Docker有如下三种方式:根据实际需要以不同的方式进行安装Docker。
- 1.设置Docker的仓库并从中安装,以方便安装和升级任务。 #推荐此方法。
- 2.更新CentOS操作系统,使用脚本自动化安装Docker。
- 3.使用国内阿里云开源仓库,进行获取、更新、下载并安装Docker。
- 执行时间同步操作命令如下:
[root@docker ~]# yum install ntpdate -y [root@docker ~]# ntpdate pool.ntp.org
- 安装yum-utils它提供yum-config-manager实用程序,安装命令如下:
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
- 执行以下操作设置稳定仓库源,并更新yum缓存,执行命令如下:
[root@docker ~]# yum-config-manager \ --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@docker ~]# yum makecache fast
- 安装最新版本的Docker,安装命令如下:
[root@docker ~]# yum install –y docker-ce
- 启动Docker服务,并加入开机自启,配置命令如下:
[root@docker ~]# systemctl start docker [root@docker ~]# systemctl enable docker
- Docker通过运行hello-world 镜像验证是否正确安装,执行如下命令:
[root@docker ~]# docker run hello-world latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. 此命令完成的功能是下载测试镜像并在容器中运行它。当容器运行时,它打印一个" Hello from Docker!" 信息消息并退出,代表容器安装完成。3.docker配置文件默认目录**
开启docker服务自动生成
root@Super:~# ls /var/lib/docker/ aufs/ containers/ image/ network/ plugins/ swarm/ tmp/ trust/ volumes/3.docker的主要组成部分
1.docker是传统的CS架构分为docker client和docker server,像 mysql一样.
2.docker主要组件有:镜像、容器、仓库, 网络,存储3.docker info 命令用来做监控
[root@docker01 ~]# docker info Containers: 17 Images: 4 Server Version: 18.09.2 Storage Driver: overlay2 Logging Driver: json-file Cgroup Driver: cgroupfs 等等
5.docker镜像加速
1.镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
##配置docker镜像加速 vi /etc/docker/daemon.json { "registry-mirrors": ["https://oz89b7jo.mirror.aliyuncs.com"] }2.启动第一个容器
docker run -d -p 80:80 nginx run(创建并运行一个容器) -d 放在后台 -p 端口映射 nginx 镜像的名字3.重启docker服务,容器全部退出的解决办法
1).方法一:docker run --restart=always
2).方法二:"live-restore": truedocker server配置文件/etc/docker/daemon.json参考 { "registry-mirrors": ["http://b7a9017d.m.daocloud.io"], "graph": "/opt/mydocker", "insecure-registries":["10.0.0.11:5000"], "live-restore": true }
6.docker的镜像管理
1.搜索镜像
docker search
2.获取镜像
如果想查看镜像有哪些版本需要借助浏览器查询,命令行无法实现。3.docker镜像相关操作
## 第三方docker镜像仓库,使用方法: docker pull index.tenxcloud.com/tenxcloud/httpd:latest 查看镜像 docker images docker image ls 删除镜像 docker rmi 例子:docker image rm centos:latest 导出镜像 docker save 例子:docker image save centos > docker-centos7.4.tar.gz 导入镜像 docker load 例子:docker image load -i docker-centos7.4.tar.gz
7.docker的容器管理
1.启动并进入容器
[root@docker01 ~]# docker run -it --name centos6 centos:6.9 /bin/bash [root@635adc21e7ec /]#-it // 分配交互式的终端 i=interaction t=terminal
--name // 指定容器的名字
centos:6.9 // 指定镜像的名称和版本
/bin/sh // 覆盖容器的初始命令2.临时退出快捷键
ctrl +p,ctrl +q3.杀死容器
docker kill container_name4.查看容器列表
docker ps -a :显示所有的容器,包括未运行的。 -f :根据条件过滤显示的内容。 -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 -q :静默模式,只显示容器编号。 -s :显示总的文件大小。 --no-trunc :不截断输出。 --format :指定返回值的模板文件。7.进入容器(目的,调试,排错)
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)
docker attach(使用同一个终端)
docker attach [OPTIONS] CONTAINER总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!
业务在容器中运行:1.夯住! 2.启动服务
8.docker容器的网络访问(端口映射)
指定映射(docker 会自动添加一条iptables规则来实现端口映射) 1. -p hostPort:containerPort 2. -p ip:hostPort:containerPort 多个容器都想使用80端口 3. -p ip::containerPort(随机端口) 4. -p hostPort:containerPort:udp 5. -p 81:80 –p 443:443 可以指定多个-p随机映射
docker run -P (随机端口)
- 通过iptables来实现的端口映射,需要内核转换参数。
[root@docker01 ~]# sysctl net.ipv4.ip_forward=0 net.ipv4.ip_forward = 0 [root@docker01 ~]# sysctl net.ipv4.ip_forward=1 net.ipv4.ip_forward = 12.查看iptables路由转发规则,来自于172.17网段的所有ip全部转发至物理网卡ip
[root@docker01 ~]# iptables -t nat -nvL添加辅助ip
1.多个容器都想使用80端口,一个网卡配置多个ip
[root@docker01 ~]# ifconfig eth0:1 10.0.0.100/24 up [root@docker01 ~]# ifconfig2.一台机器一个端口绑定多个容器,使用多ip形式
[root@docker01 ~]# docker run -d -p 10.0.0.11:80:80 nginx:latest [root@docker01 ~]# docker run -d -p 10.0.0.100:80:80 nginx:latest3.随机端口访问,控制随机端口的范围是由系统内核参数控制
[root@docker01 ~]# docker run -d -p 10.0.0.100::80 nginx:latest
9.docker的数据卷管理
1.持久化
数据卷(文件或目录) -v 卷名:/data -v src(宿主机的目录):dst(容器的目录) 数据卷容器 --volumes-from(共享,跟某一个已经存在的容器挂载相同的卷)2.挂载数据卷
[root@docker01 ~]# docker run -d -p 80:80 -v /opt/myregistry:/var/lib/registry nginx:latest3.数据卷容器,存储持久化
[root@docker01 ~]# docker volume ls DRIVER VOLUME NAME local oldvol [root@docker01 ~]# docker volume ls -q oldvol [root@docker01 ~]# docker volume rm -f `docker volume ls -q` oldboy [root@docker01 ~]# docker volume create x86cloud x86cloud [root@docker01 ~]# docker volume ls DRIVER VOLUME NAME local x86cloud [root@docker01 ~]# docker volume inspect x86cloud [ { "CreatedAt": "2019-02-24T01:59:15+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/x86cloud/_data", "Name": "x86cloud", "Options": {}, "Scope": "local" } ]4.共享存储,共享同一个逻辑卷
[root@docker01 ~]# docker run -d -p 80:80 -v x86cloud:/usr/share/nginx/html [root@docker01 ~]# docker run -d -p 81:80 --volumes-from 10f3d932d35a nginx:latest
10.手动将容器保存为镜像
docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]
[root@Proxydan ~]#docker commit 699e4f07b8dc centos6.9_ssh:v1 [root@Proxydan ~]#docker images1):基于容器制作镜像
镜像包含俩个服务1)sshd 2)nginx
镜像内要包含服务启动脚本,最后一条命令要夯住docker进程docker run -it centos:6.9 ###### yum install httpd yum install openssh-server /etc/init.d/sshd startvi /init.sh #!/bin/bash /etc/init.d/httpd start /usr/sbin/sshd -D2)将容器提交为镜像
docker commit e46559c631b4 centos6.9_ssh_nginx:v13)测试镜像功能是否可用
docker run -d -p 1222:22 -p 80:80 centos6.9_ssh_nginx:v1 /bin/bash /init.sh
11.docker清理方案
1.查看资源占用情况
[admin@kuboard /tmp] SUSE云端服务器 $docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 30 11 16.26GB 13.24GB (81%) Containers 14 7 3.652GB 2.166GB (59%) Local Volumes 41 2 12.7GB 1.749GB (13%) Build Cache 0 0 0B 0BACTIVE:镜像实际是我们不打算删除的
RECLAIMBLE:表示可回收的资源
2.查看详细资源占用情况
[admin@kuboard /tmp] SUSE云端服务器 $docker system df -v Images space usage: Containers space usage: Local Volumes space usage: Build cache usage:3.资源自动清理命令
[admin@kuboard /tmp] SUSE云端服务器 $docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache Are you sure you want to continue? [y/N] y Deleted Containers: 9279613d8b78ada7ba90cda46fe609a94c54559592fad1902676e013f13d64f6 deced07baa49c5fb3748f402f817f65397c83419ed42db456c9e3dd1b4d57cbf 4aa2405bee8459dda02209991e9f79c90846e0a57c1302963f0124861cad2319 8c69e443e181be58015a744737eeff56f6aaf6d7af54a1e75f5b74d03c3f244d dd3791be32744fb0f8745d5359f4308ee2685199a288f3c6f9a2c4f48a14616a b93f2e2d3df9a0caa738d68784ad92986572f34ad96db0229a40d62d71aedc31 453315e4e8e1e2ffb324a212ef384cc5451bfb679deadf933537e5f18befc90c Total reclaimed space: 2.166GB参数:
-a慎用
-f慎用4.手工清理
# 删除所有悬空镜像,但不会删除未使用镜像: docker rmi $(docker images -f "dangling=true" -q) # 删除所有未使用镜像和悬空镜像。 # 【说明】:轮询到还在被使用的镜像时,会有类似"image is being used by xxx container"的告警信息,所以相关镜像不会被删除,忽略即可。 docker rmi $(docker images-q) # 删除所有未被任何容器关联引用的卷: docker volume rm $(docker volume ls -qf dangling=true) # 也可以直接使用如下指令,删除所有未被任何容器关联引用的卷(但建议使用上面的方式) # 【说明】轮询到还在使用的卷时,会有类似"volume is in use"的告警信息,所以相关卷不会被删除,忽略即可。 docker volume rm $(docker volume ls -q) # 删除所有已退出的容器 docker rm -v $(docker ps -aq -f status=exited) # 删除所有状态为 dead 的容器 docker rm -v $(docker ps -aq -f status=dead)
12.修改docker网桥ip
修改 /etc/docker/daemon.json文件 添加 “bip”: “192.168.99.1/24” <网段/掩码>
$cat /etc/docker/daemon.json { "log-level": "warn", "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "5" }, "registry-mirrors": ["https://68x5k838.mirror.aliyuncs.com"], "graph": "/data/dockerdata", "bip": "192.168.99.1/24" }保存后重启docker服务