Decker ce版社区(个人、免费)版安装
(镜像、容器、仓库)docker基本组成三大对象
先安装虚拟机VMware14或者15。
再在虚拟机上安装linux系统CentOS-7版本。
最后检查安装好的虚拟机是否网络正常,如果不正常到服务器中启动vmware相关的几个服务。
docker的架构图
官网地址:
https://docs.docker.com/engine/install/centos/
- 环境准备:
yum -y install gcc
yum -y install gcc-c++
1卸载老的版本:(root账户sudo命令可以不要)
$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.正式安装:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新 yum 缓存:
sudo yum makecache fast
5.安装 Docker-ce:
sudo yum -y install docker-ce
6.启动 Docker 后台服务
sudo systemctl start docker
7.测试运行 hello-world ------------运行这之前最好配置国内的镜像加速
docker run hello-world
- 镜像加速
登录阿里云
进入容器镜像服务
镜像加速地址:
https://znwxqy7s.mirror.aliyuncs.com
Linux6.8 配置文件路径:/etc/sysconfig/docker
vim /etc/sysconfig/docker
修改other)args=”” 中添加阿里镜像加速地址
重启docker后台服务:
servic docker start
docker viersion 验证配置是否正确。
Linux7以上配置文件:/etc/docker/daemon.json
可能本地没有daemon.json文件
配置文件中添加:
{ “registry-mirrors”: [“https://znwxqy7s.mirror.aliyuncs.com”] }
重启运行:
systemctl daemon-reload
systemctl restart docker
或者直接运行下列直接改好:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { “registry-mirrors”: [“https://znwxqy7s.mirror.aliyuncs.com”] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
测试是否配置好镜像加速
ps -ef| grep docker
- 下一个话题
运行
docker run hello-world
- 镜像和容器命令
帮助命令
docker 验证
docker version
docker 的信息
docker info
docker 帮助命令
docker --help
- 镜像命令
列出本地主机上的镜像
docker images
OPTIONS说明: -a :累出本地所有的镜像(含中间映像层) -q:只显示镜像id --digests:显示镜像的摘要信息(DIGEST说明) --no-trunc:显示完整的镜像信息(IMAGE ID完整id)
镜像的仓库源 镜像标签(默认latest---最新版) 镜像id 创建镜像的时间 卷标大小
查询镜像 docker search 查询目标网站:官网 hub.docker.com
OPTIONS说明: -s :列出收藏数不小于指定值的镜像 --automated:之类出automated build类型的镜像 --no-trunc:显示完整的镜像描述
docker search tomcat
下载镜像docker pull 下载对象
docker pull tomcat
删除某个镜像 docker rmi 镜像id和名称
docker rmi
用名称删除
-f 强制删除 名称删除需要唯一名称 -f hello-world nginx 多少删除 全部全面所有的删除 是组合命令 docker -f $(docker images -qa)
- 容器命令
新建并启动容器 options说明(常用):有些是一个减号,有些是二个减号。 --name=“容器新名字”:为容器指定一个名称
-d:后台运行容器,并返回容器id,也即启动守护式容器。
-i:以交互模式运行容器,通常于-t同时使用;
-t:为容器重启分配一个伪输入终端,通常于-i同时使用。
-P:水机端口映射;
-p:指定端口映射,有以下四种格式。 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
选项参数 镜像
docker run [OPTIONS] IMAGE [COMMAND] [ARG..]
列:以300e315adb2f镜像生成了一个容器 mycentos005 且已经进入了新的centos里 a9b72b122da6新生成对象的地址
docker run -it --name mycentos005 300e315adb2f
列出当前所有正在运行的容器
options说明:-a:列出当前所有正在运行的容器+历史上运行过的 -l:显示最近创建的容器 -n:显示最近n个创建的容器。 -q:静默模式,只显示容器编号。 --no-trunc:不截断输出。
docker ps
退出容器
exit 容器停止退出 关闭容器并退出
ctrl+P+Q 容器不停止退出
启动容器
docker start 容器id或者容器名
重启容器
docker restart 容器id或者容器名
停止容器
docker stop 容器id或容器名
强制停止容器
docker kill 容器id或容器你名
删除已停止的容器
docker rm 容器id或容器名
一次性删除多个容器
管道符 前面的结果传给下一个 | xargs
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
启动守护式容器
docker run -d --name mycentos008 centos
查看容器日志 -t是加入时间戳 -f跟随最新的日志打印 --tail 数字 显示最后多少条
docker logs -f -t --tail 容器id或容器名
docker run -d centos /bin/sh -c "while true;do echo hello whj ;sleep 2;done"
查看容器内运行的进程
docker top 容器id或容器名
查看容器内部细节
docker inspect 容器id
直接进入容器的启动命令的终端,不会启动新的进程-----进入在运行的容器
docker attach fed5919cf819
实在容器中打开新的终端,并且可以启动新的进程---------在外层直接运行在某个容器中运行命令docker exec -t af94e99a49de ls -l /tmp
docker exec -t af94e99a49de ls -l /tmp
docker exec -t fed5919cf819 /bin/bash 同样进入容器里
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目标主机路径
- 常用命令总结
- docker 镜像
是什么?UnioFS(联合文件系统)--------------镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所有需要的所有内容,包括代码、运行时、库、环境变量和配置文件。
Docker镜像加载原理----------------
分层的镜像
为什么Docker镜像要采用这种分层结构
特点:docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
- 镜像操作补充commit
docker commit 提交容器副本使之成为一个新的镜像。
docker commit -m=“提交的秒速信息” -a=“作者” 容器id要创建的目标镜像名:[标签名]
容器运行访问端口:镜像内部端口
docker run -it -p 8888:8080 tomcat:8.5.32
访问:localhost:8888 结果404 原因:该镜像的容器实例中的webapps目录下total为0 解决: 1、先查看防火墙状况 service firewalld status 2、如果防火墙时开的,需要关闭 关闭防火墙 systemctl stop firewalld.service 禁止防火墙开机启动 systemctl disable firewalld.service 重启docker systemctl restart docker
P随机分配端口
docker run -it -P tomcat
复习停止
docker stop 容器名或者容器ID
docker kill 容器名或者容器ID
docker rm -f 容器名或者容器ID 强制删除
docker rm -f $(docker ps -q)删除正在运行的容器
删除tomcat帮助文档
使用删除后的容器打包成新的镜像
docker commit -a="whj" -m="del tomcat docs" 53e5df4ace6a atwhj/mytomcat:1.8
运行新的自己的镜像
docker run -it -p 8888:8080 atwhj/mytomcat:1.8
用新自己打包的镜像运行同样没有帮组列
守护式容器启动
docker run -d -p 7777:8080 atwhj/mytomcat:1.8
容器数据卷
特点:1。数据卷可在容器之间共享或重用数据
2.卷中的更改可以直接生效。
3.数据卷中的更改不会包含在镜像的跟新中。
4.卷数据的生命周期一直持续到没有容器使用它为止。
数据卷
向容器内添加内容
命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
宿主对应目录下文件和容器下目录完全一样修改,删除,新增。且容器停止后,再启动同样和宿主机上的内容一样。还有使用宿主机上一个现有文件夹创建容器,开启后的容器对应卷中也有宿主机下对应的内容。并且宿主卷中删除都对应目录,容器中目录在文件不在
如果宿主机上写数据出现:cannot open directory:Permissiondenied
解决办法:在挂载目录后多加一个 --privileged=true 参数即可。
docker run -it -v /宿主机绝对路径目录:/容器内目录 --privileged=true 镜像名
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
ro 只读权限,是单项容器上只可以查看,容器上对应不目录下不可以新建,修改,删除。而宿主机上对应目录可以新增,修改,删除影响到容器上。
重启命令: 1、reboot 2、shutdown -r now 立刻重启(root用户使用) 3、shutdown -r 10 过10分钟自动重启(root用户使用) 4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启 关机命令: 1、halt 立刻关机 2、poweroff 立刻关机 3、shutdown -h now 立刻关机(root用户使用) 4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
数据卷容器
- DockerFile
创建个linux镜像,且在镜像容器运行是在根目录下创建2个数据卷目录,打印文字一段,最后到 /bin/bash
# voolume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD eco "finished,----------success1" CMD /bin/bash 相当于命令中 docker run -it -v /host:dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash
数据卷容器 容器间传递共享(--volumens-from)
创建一个容器,且有2个数据卷
docker run -it --name dc01 whj/centos
创建容器dc02 并继承容器dc01的数据卷
docker run -it --name dc02 --volumes-from dc01 whj/centos
创建容器dc03 并继承容器dc01的数据卷
docker run -it --name dc03 --volumes-from dc01 whj/centos
删除dc01容器后,dc02数据卷修改,可以反馈到dc03
创建dc04容器,继承dc03
docker run -it --name do04 --volumes-from dc03 whj/centos
删除dc03 修改dc04 可以反馈到dc02
所以结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止