一、前言
(1)、容器的介绍
1、Copy-on-Write 可写容器层
2、容器层以下所有镜像层都是只读的
3、docker从上往下依次查找文件
4、容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
5、一个镜像最多127层
(2)、虚拟机和docker区别
二、基础命令
docker pull busybox %从镜像仓库拉取(下载)镜像
docker load -i busybox.tar %本地已有镜像包的时候直接在本地加载镜像
docker images %查看本地镜像列表
docker history busybox:latest %查看镜像修改历史
docker ps %查看后台开启的容器状态
docker ps -a %查看后台所有容器状态
docker rm -f ef3b3fa540ec %删除容器
docker build -t demo:v6 . %创建容器(以当前路径下的dockerfile自动创建的方式)
docker run --rm demo:v6 %rm表示运行容器后回收(删除)
docker run -d demo:v6 %-d表示运行容器的同时将其打入后台
docker run -it --name demo demo:v5 %-it表示运行容器的同时进入容器,交互式
docker inspect demo %查看容器详细信息
docker commit demo demo:v1 %把demo保存为demo:v1
docker run -d --name demo nginx %以demo的名字后台运行
docker run -d --name demo -p 80:80 game2048 %在后台用取名为demo的容器运行game2048,从虚拟机到容器的端口映射为80
docker load -i busybox %将文件busybox导入到容器
docker run -it -d --name demo nginx %开启容器,在取名demo的容器中运行nginx
docker rmi game2048:latest %删除进程
二、docker安装
前提是真机将docker-ce这个软件源在apache上分享了出来
1、安装启用docker
[root@server1 yum.repos.d] vim docker.repo 设置软件仓库
///
[docker]
name=docker-ce
baseurl=http://172.25.42.250/docker-ce
gpgcheck=0
/
[root@server1 yum.repos.d] yum install docker-ce -y 下载软件
[root@server1 yum.repos.d] systemctl start docker 启动docker
[root@server1 yum.repos.d] systemctl enable docker 开机自启动
[root@server1 yum.repos.d] docker info 查看docker运行情况
正常情况
当出现以下报错时
解决方法
[root@server1 sysctl.d] vim /etc/sysctl.conf 设置内核参数
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 sysctl.d] sysctl --p 使内核策略生效
当显示ip4/6未开启时,解决方法
vim /etc/sysctl.conf
///
net.ipv4.ip_forward = 1
///
sysctl -p
警告消失
三、导入游戏包程序运行
利用游戏的镜像tar,导入容器,运行容器并打入后台,80端口映射到8080端口
[root@server1 mnt] ls
game2048.tar harbor harbor-offline-installer-v1.10.1.tgz
[root@server1 mnt] docker load -i game2048.tar 上传镜像文件到docker
[root@server1 mnt] docker run -d --name demo -p 80:8080 game2048 -d代表打入后台,容器的名字叫demo,-p 用真实主机的80映射到容器8080端口,用game2048镜像运行。
[root@server1 ~] docker ps -a|grep demo 查看端口当前映射
发现了端口映射
即可在网页上看到效果
再次运行另一个游戏时
[root@server1 mnt] docker rm -f demo 删除之前的容器
[root@server1 mnt] docker load -i mario.tar
[root@server1 mnt] docker run -d --name demo -p 80:8080 mario 用宿主机的80端口对容器8080端口进行映射
发现可以宿主机的80端口可以进行游戏
四、镜像层的构建
(1)、构建方法1
1、上传镜像,开启带有交互式终端的容器,容器名字叫demo
可以使用ctrl+p+q的方式将容器打入后台运行
[root@server1 ~] docker load -i busybox.tar
[root@server1 ~] docker run -it --name demo busybox
[root@server1 ~] docker ps 查看容器的进程
2、可以通过以下方式连接挂到后台的demo
[root@server1 ~] docker container attach demo
3、提交新的镜像
[root@server1 ~] docker commit demo demo:v1 将demo提交新镜像,命名为demo:v1
[root@server1 ~] docker history busybox:latest 查看busybox:latest历史
[root@server1 ~] docker history demo:v1 查看demo:v1历史
[root@server1 ~] docker image ls
可以看到busybox:latest镜像有两层,而demo是在busybox:latest的基础上再加了一层,提交之后可以看到demo:v1的版本出现在了镜像文件里面
4、删除镜像demo:v1
[root@server1 ~] docker rmi demo:v1
[root@server1 ~] docker image ls
[root@server1 ~] docker history busybox:latest
删除镜像文件后发现busybox:latest的镜像层数不变
注意
dockerfile有审计功能,每新加一层镜像都会有动作审计说明
dockerfile不能放在根下,否则会把根下所有数据发送给docker引擎
(2)、构建方法2
1、建立文件,书写镜像规则
[root@server1 ~] mkdir docker
[root@server1 ~] cd docker/
[root@server1 docker] vim Dockerfile
///
FROM busybox 镜像来源
RUN echo hello > testfile 容器进行的操作
/
[root@server1 docker] docker build -t demo:v2 . 在当前目录下建立镜像
[root@server1 docker] docker image ls
可以在docker的镜像文件中见到刚建立了demo:v2
2、查看demo:v2的历史
k可以发现也是在busybox的基础上进行构建的