Docker安装&镜像优化
需要使用红帽7.5版本以上的镜像构建的虚拟机
docker安装
阿里云开源镜像站:https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
官方站点:https://docs.docker.com/ https://docs.docker.com/install/linux/docker-ce/centos/
安装
yum install bash-* -y
yum install *.rpm
安装完docker后如果 发现tab命令不能补全 是因为缺少一个包 yum install bash-* -y
安装一个小游戏
docker load -i game2048.tar
docker run -d --name game1 -p 80:80 game2048
docker ps
在浏览器中测试:ip地址 eg:网页游戏
解决“警告”问题:
docker info
可以看到
WARNING: IPv4 forwarding is disabled
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
cd /etc/sysctl.d
过滤内核参数 将这些改成 1
sysctl -a | grep forwarding
sysctl -a | grep bridge
cd /etc/sysctl.d/
vim docker.conf
inet.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 1
net.ipv4.conf.docker0.forwarding = 1
net.ipv4.conf.docker0.mc_forwarding = 1
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 1
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl --system #使其立即生效
docker命令 | |
---|---|
docker load -i ubuntu.tar | 导入镜像(以ubuntu镜像为模板) |
docker run -it --name vm1 ubuntu | 创建容器(以ubuntu镜像为模板) |
docker ps | 查看容器状态,当前活跃的 |
docker ps -a | 查看容器状态(包括不活跃的容器),所有的 |
docker attach vm1 | 连接容器 |
docker top vm1 | 查看容器进程 |
docker logs vm1 | 查看容器指令输出 -f 参数可以实时查看 |
docker inspect vm1 | 查看容器详情 |
docker stats vm1 | 查看容器资源使用率 |
docker diff vm1 | 查看容器修改 |
docker stop vm1 | 停止容器 |
docker start vm1 | 启动容器 |
docker kill vm1 | 强制干掉容器 |
docker restart vm1 | 重启容器 |
docker pause/unpause vm1 | 暂停/恢复容器 |
docker rm vm1 | 删除容器 |
docker rm -f vm1 | 强制删除容器 |
docker rmi ubantu | 删除镜像 |
docker images | 列出镜像 |
docker run 参数 | |
---|---|
-a stdin | 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; |
-d | 后台运行容器,并返回容器ID; |
-i | 以交互模式运行容器,通常与 -t 同时使用; |
-P | 随机端口映射,容器内部端口随机映射到主机的端口 |
-p | 指定端口映射,格式为:主机(宿主)端口:容器端口 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用; |
–name=“nginx-lb” | 为容器指定一个名称; |
–dns 8.8.8.8 | 指定容器使用的DNS服务器,默认和宿主一致; |
–dns-search example.com | 指定容器DNS搜索域名,默认和宿主一致; |
-h “mars” | 指定容器的hostname; |
-e username=“ritchie” | 设置环境变量; |
–env-file=[] | 从指定文件读入环境变量; |
–cpuset=“0-2” or --cpuset=“0,1,2” | 绑定容器到指定CPU运行; |
-m | 设置容器使用内存最大值; |
–net=“bridge” | 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; |
–link=[] | 添加链接到另一个容器; |
–expose=[] | 开放一个端口或一组端口; |
–volume , -v | 绑定一个卷 |
docker镜像&容器
镜像是一种文件结构,包含如何运行容器的元数据 Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构
文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上 当容器启动后,所有镜像都会统一合并到一个进程中
联合文件系统中的文件被删除时, 它们只是被标记为已删除,但实际上仍然存在
镜像是docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器
docker images rhel7
docker run -it --name vm1 ubuntu #run:创建并运行一个容器
-it:以交互式的形式 --name:给容器起个名字 ubuntu:镜像名称
docker ps -a 查看镜像
docker rm b16f9eaab99e 删除镜像,后面加镜像ID
docker commit 构建镜像
运行容器
修改容器
将容器保存为新的镜像
缺点
效率低 可重复性弱 容易出错 使
用者无法对镜像进行审计,存在安全隐患