yum install docker -y #安装
systemctl start docker.service #启动服务
systemctl enable docker.service #随机启动
docker version
docker search 镜像名字 #搜索镜像
docker pull ubuntu #从docker官方仓库下载镜像
docker images #查看当前系统有哪些镜像
docker inspect 镜像ID #查看镜像详细信息
docker tag 旧名称:旧标签 新名称:新标签
docker rmi 镜像ID或仓库名称:标签 #删除镜像 注意:对于多标签的镜像,
#使用docker rmi删除镜像只会删除对应的标签而不是镜像,除非这个标签是最后一个
#如果有基于该镜像运行的容器,请先删除容器再删除镜像
#docker create -t -i ubuntu /bin/bash //创建(但不运行)一个容器
#docker run -t -i ubuntu /bin/bash //docker run -d -it ubuntu /bin/bash
新建并启动一个容器,可以基于某个镜像开无数个容器
这里的-t是让docker分配一个伪终端,
-i是让容器的标准输入保持打开
也可以加-d 放后台运行
-c 进入容器运行命令
确认系统上有哪些容器
#docker ps -a
如果进入容器后,退出想重新进入原来的容器,可以使用如下步骤和命令来完成
docker start|stop 容器id
#docker attach 容器的名字 //也可以使用docker exec 或者第三方软件nsenter
docker exec -it 容器名字或容器id /bin/bash
退出容器:exit
#docker save -o ubuntu_14.04.tar ubuntu:14.04 //导出镜像
#docker load < ubuntu_14.04.tar //导入镜像
#docker stop 容器ID //停止容器
#docker rmi ubuntu //删除镜像
#docker rm 容器id //删除容器
#docker export 容器id的前4个字符 > test_con.tar //导出容器(生成的是一个镜像)
#cat test_con.tar |docker import - test/ubunut:v1.0 //导入容器 (test/ubunut:v1.0这个容器将被取代)
#########容器资源控制#########
docker run -t -i -m 100M --memory-swap 200M --cpu-share 1024 docker.io/centos /bin/bash
//先启动一个容器 #-m 内存大小--memory-swap swap大小,--memory-swap默认是-m指定的两倍
多任务--cpu-share 后面跟1024及倍数 如果另一个容器为2048 ,那么这两个容器cpu资源配比为1:2
--cpuset-cpus 0,1,2,3.... 设置容器独占内核
--device-write-iops 设定每秒io次数限制设备写速度 示例: --device-write-iops 2
--device-read-bps 设定读取速度 示例:--device-read-bps 1MB
--device-write-bps 意思自己猜
docker ps -a //查询容器ID
cd /sys/fs/cgroup/cpu/system.slice/docker-fee4bfa929b33a7c7d1f58385d655e720dea02fa55d9cc73fe70cea9951c9720.scope
#切换目录 cpu.cfs_quota_us /cpu限额 -1不限制 可以修改为20000,意思就是不超过20%
docker镜像创建:
1)基于已有的镜像创建:
docker commit 选项 容器ID|名称 仓库名称:标签
选项 -m 说明信息
-a 作者信息
-p 生成过程总停止容器运行
示例:
docker ps -a #查询容器
docker commit -p -m "centos" -a "tommypeng" a8ea31e32454 peng:centos7-20200805 ##运行中的容器生成镜像
docker images | grep peng ##查询彭这个仓库的镜像
2)基于本地模板创建
http://openvz.org/Download/template/precreated #模板下载开源地址
示例:
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz ##下载debian模板
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test ###导入为镜像
3)基于Dockerfile创建
在编写 Dockerfile时,有严格的格式需要遵循:
第一行必须使用FROM指令指明所基于的镜像名称;
之后使用MAINTAINER指令说明维护该镜像的用户信息;
然后是镜像操作相关指令,如 RUN指令。每运行一条指令,都会给基础镜像添加新的一层
最后使用CMD指令指定启动容器时要运行的命令操作。
示例:
1)切换到opt目录下,创建apache目录 准备网页文件
cd /opt/
mkdir apache
cd apache/
vim index.html
<h1>this is my first dockerfile</h1>
cat index.html
<h1>this is my first dockerfile</h1>
(2)编写dockerfile脚本
vim Dockerfile
FROM centos:7 #基于基础镜像centos7
MAINTAINER The centos project <pxg 202208051946> ##维护人员信息
RUN yum install -y httpd ##镜像操作指令:安装apache
EXPOSE 80 ##开放80端口
ADD index.html /var/www/html ##复制网站首页文件
WORKDIR /usr/sbin/ ##知道执行路径
ENTRYPOINT ./apachectl -D FOREGROUND ##指定前台运行
(3)创建一个新的镜像,并执行 Dockerfile脚本
docker build -t apache:centos7 . ###眼睛睁大一点哦 -t 指定镜像的标签信息
docker run -itd -p 1314:80 apache:centos7 /bin/bash ###运行
##########私有仓库#########
docker pull registry ##拉取私有仓库镜像
vim /etc/sysconfig/docker ##编辑配置文件
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry=192.168.137.215:5000'
systemctl restart docker ##重启docker
docker run -d -p 5000:5000 -v /date/registry:/tmp/registry registry ##启动容器
docker tag docker.io/registry 192.168.137.215:5000/registry ###重置标签
docker push 192.168.137.215:5000/registry ##像私有仓库导入镜像
##########docker的数据管理##########
docker run -d -v /data1 -v /data2 --name web apache:centos7 /bin/bash ###运行容器,创建data1和data2两个数据卷
docker ps
docker exec -it web /bin/bash ##进入容器终端
ls / ##浏览根,显示如下,data1 和 data2挂载在容器的根下
anaconda-post.log bin boot data1 data2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
##挂载宿主机目录作为数据卷
mkdir /ppo ###宿主机创建目录
docker run -d -v /ppo:/data1 --name web1 apache:centos7 /bin/bash ##运行容器,将宿主机ppo目录挂载到容器的data1目录
touch /ppo/1.txt ##在宿主机创建文件
docker exec -it web1 /bin/bash ##进入容器
ls /data1 ##浏览容器的data1 目录 ,可以看到1.txt文件
###反之亦然
###数据卷容器
docker run -it --volumes-from web --name db1 apache:centos7 /bin/bash ##运行容器,并挂载容器web的数据卷
docker start 8909d263727 ##启动容器
docker ps -a ##查看容器
docker exec -it db1 /bin/bash ##登录容器
ls / ## 浏览根,可以看到data1和data2
############docker网络通信############
##端口映射
docker run ####-P 随机映射端口 -p 指定映射端口
##例如:
docker run -it -p 80:80 --name NAT apache:centos7 /bin/bash
##容器互联
docker run ##--link name:alias name是要连接的容器名称 ,alias是连接的别名
容器web1已经存在
docker run -d -P --name web2 --link web1:web1 apache:centos7 /bin/bash ##创建并运行容器web2与web1互联
docker exec -it web2 /bin/bash ##进入容器web2
ping web1 ##测试连通性