文章目录
- Docker学习总结
- 一、Docker的安装:
- 二、Docker常用命令
-
- 三、镜像详解
- 四、容器数据卷(持久化,数据共享)
- 1、用命令添加数据卷
- 2、DockerFile添加数据卷
- 3、数据卷容器
- 五、DockerFile
- 1、DockerFile解析过程:
- 2、保留字指令:
- 3、实际案例:
- 六、Docker常用安装
-
- 七、本地镜像发布阿里云
Docker学习总结
Docker三大组成: image(镜像)、container(容器)、repository(仓库)。
- 镜像:一个镜像可以有多个容器,每个镜像都有不同的tag(版本号)。
- 容器:是镜像的实例,一个镜像可以有多个容器,容器是简易版的lunix环境和在其中运行的应用程序。
- 仓库:集中存放image的地方
- 仓库注册服务器:存在着多个仓库
仓库又分公开仓库和私有仓库,最大的公开仓库是Docker Hub(基本不用,国外的网站),国内的公开仓库有:阿里云、网易云等
Dcoker与虚拟机的区别:
| Docker容器 | 虚拟机(VM) |
---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小,便于存储于传输镜像庞大 | |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
一致性 | 轻便、灵活、适应于lunix | 笨重,与虚拟化技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
部署速度 | 快速,秒级 | 较慢,10s以上,分钟级 |
一、Docker的安装:
参考官方文档:
Docker官方文档
在lunix系统安装Docker必须是centos6.5以上,我的系统是centos7.6。
-
1、安装所需软件包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
-
2、设置仓库:
官方仓库:
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
-
3、安装Docer:
yum install docker-ce docker-ce-cli containerd.io
一路Y就行
-
新建并编辑:
vim /etc/docker/daemon.json
-
输入并保存:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
若提示错误,先创建文件
-
重新加载并重新启动Docker:
systemctl start docker
systemctl daemon-reload
systemctl restart docker
-
查看docker运行情况:
docker info
ps -ef | grep docker
-
docker初体验:
docker run hello-world
-
设置docker开机启动
systemctl enable docker
-
关闭docker开机启动
systemctl disable docker
二、Docker常用命令
1、帮助命令:
- docker version:查看docker版本
- docker info:查看docker详情
- docker --help:帮助命令
2、镜像命令:
-
docker images:本地镜像列表
REPOSITORY | TAG | IMAGE ID | CREATED | VIRTUAL SIZE |
---|
镜像的仓库源 | 镜像的标签 | 镜像ID | 创建时间 | 镜像大小 |
同一个镜像有多个tag及多个版本,默认为lasted,用:来表示版本号 | | | | |
参数选项: | | | | |
-a:列出本地镜像(含中间映射层) | | | | |
-q:只列出镜像的id | | | | |
-qa:组合健 | | | | |
–digests:显示镜像的摘要信息 | | | | |
– no-trunc:显示完整的镜像信息 | | | | |
-
docker search:官方镜像仓库搜索指定的镜像
docker search tomcat
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|
镜像名称 | 描述 | 点赞数 | 是否为官方版本 | 自动构建 |
参数选项:
-s:列出收藏数不小于指定值的镜像,例如;
docker search -s 50 tomcat
– no-trunc:显示完整的镜像信息
–automated:只列出autjomated build类型的镜像
-
docker pull:从仓库下载镜像,不加版本号默认是最新版:
docker pull tomcat
-
docker rmi:删除镜像,运行中的镜像会报错,需要加上 -f 强制删除:
不加版本号默认删除的是最新版
docker rmi -f hello-world
docker rmi -f hello-world tomcat
docker rmi -f $(docker images -qa)
3、容器命令:
-
docker run:新建并启动一个容器
参数选项:
–name–:为容器指定一个名称
-d:后台运行容器并返回ID,即启动守护式容器
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪终端,通常与 -i 同时使用
-P:随机端口映射
-p:指定端口映射,有四种格式
1> ip:hostPort:containerPort
2> ip::contaimerPort
3> hostPort:containerPort
4> containerPort
docker run -it -p 8080:8080 tomcat
-
exit:退出容器,容器停止
-
Ctrl+P+Q:退出容器,容器不停止
-
docker ps:查看运行的容器
参数选项:
-a:列出所有正在运行和历史运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
– no-trunc:不截断输出
组合使用:
docker ps -lq
docker ps -aq
-
docker start:启动容器
docker start c7661da822b4
-
docker restart:重启容器
docker restart c7661da822b4
-
docker stop:停止容器,通过id或容器名
-
docker kill:强制停止容器
-
docker rm:删除已停止运行的容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
-
docker logs :查看日志
docker logs -t -f --tail 5 c7661da822b4
-
docker top:查看容器内进程
-
docker inspect:查看容器内部细节,json字符串显示
-
docker attach:进去容器并启动命令终端
-
docker exec:在容器外执行,并且返回结果
docker exec c7661da822b4 ls -l
-
docker cp:从容器中复制到宿主机
-
docker commit:提交容器副本成为一个新的镜像
参数选项:
-m:" 提交的描述信息 "
-a:" 作者 "
docker commit -a="smilevers" -m="del tomcat docs" xxxxx my/tomcat01:1.2
-
–restart=always :docker容器自启动
docker run --restart=always
docker update --restart=always <CONTAINER ID>
docker update --restart=no <CONTAINER ID>
三、镜像详解
镜像是一种轻量级、可执行的独立软件包,==用来打包软件运行环境和基于运行环境开发的软件,==它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
四、容器数据卷(持久化,数据共享)
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能绕过Union File System 提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生成周期,因此Docker不会再容器删除时删除其挂载的数据卷。
- 1、数据卷可在容器之间共享或重用数据
- 2、卷中的更改可以直接生效
- 3、数据卷中的更改不会包含在镜像的更新中
- 4、数据卷的生命周期一直持续到没有容器使用为止
1、用命令添加数据卷
docker run -it -v /myDateVolume:/dataVolumeContaimer centos
docker run -it -v /myDateVolume:/dataVolumeContaimer:ro centos
Docker挂载主机目录Docker访问出现cannot open directory .:Perimisson denied
解决方案:在挂载目录后多加一个 --privileged=true 参数即可:
docker run -it -v /myDateVolume:/dataVolumeContaimer --privileged=true centos
2、DockerFile添加数据卷
镜像描述文件
#volume test
FROM centos
VOLUME ["/dataVolumeContaimer1","/dataVolumeContainer2"]
CMD echo "finished,----------success1"
CMD /bin/bash
- docker build:- f 默认文件名为Dockerfile则不需要写
docker build -f /mydocker/Dockerfile -t zzzyy/centos:1.3 .
默认会在宿主机上生成数据卷,通过docker inspect 查看
3、数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器称之为数据卷容器。
1、创建父容器
docker run -it --name dc01 zzzyy/centos
2、创建子容器并集成父容器
docker run -it --name dc02 --volumes-from dc01 zzzyy/centos
数据卷的生命周期一直持续到没有容器使用为止,删除任何数据卷容器其他容器之间还会共享。
五、DockerFile
- Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
- 流程:编写dockerfile > 构建dockerfile镜像 > 运行镜像
1、DockerFile解析过程:
基础:
- 1> 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 2> 指令按照从上到下,顺序执行
- 3> #表示注释
- 4> 每条指令都会创建一个新的镜像层,并对镜像进行提交
执行流程: - 1> docker从基础镜像运行一个容器
- 2> 执行一条指令并对容器作出修改
- 3> 执行类似docker commit的操作提交一个新的镜像层
- 4> docker再基于刚提交的镜像运行一个新容器
- 5> 执行dockerfile中的下一条指令直到所有指令都执行完成
2、保留字指令:
- FROM:基础镜像,当前新镜像是基于哪个镜像的
- MAINTAINER:镜像维护者的姓名和邮箱地址
- RUN:容器构建时需要运行的命令
- EXPOSE:当前容器对外暴露的端口号
- WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
- ENV:在构建镜像过程中设置环境变量
- ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
- COPY:从构建上下文目录中的<源路径>文件或目录,复制到新一层镜像内的<目录路径>位置
- VOLUME:数据卷,用于数据保存和持久化工作
- CMD:指定一个容器启动时要运行的命令,只要最后一个会生效,会被docker run之后的参数替换
- ENTRYPOINT:指定一个容器启动时要运行的命令,可以追加参数
- ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
3、实际案例:
Base镜像(scratch)
docker history:查看镜像历史,形成过程
-
1、
FROM centos
MAINTAINER smilevers<smilevers@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success----------"
CMD /bin/bash
-
2、
FROM centos
RUN yum -y install curl
ENTRYPOINT ["curl" ,"s" ,"http://ip.cn"]
运行docker run命令是后面的参数可以追加到"s"后面
-
3、
FROM centos
MAINTAINER smilevers<smilevers@163.com>
COPY c.txt /usr/local/cincontainer.txt
ADD apache-tomcat-9.0.tar.gz usr/local/
ADD jdk-8u171-linux-x64.tar.gz usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/lcoal/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/lcoal/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
六、Docker常用安装
1、tomcat
- 1> 仓库拉取:
docker pull tomcat
- 2> 运行:
2、Mysql
-
1> 仓库拉取:
docker pull mysql:5.6
-
2> 运行:
docker run -p 3306:3306 --name mysql \
-v /smilevers/mysql/conf:/etc/mysql/conf.d \
-v /smilevers/mysql/logs:/logs \
-v /smilevers/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD = root \
-d mydql:5.6
-
3> 数据备份:
docker exec 容器id sh -c ' exec mysqldump --all-databases -uroot -p "root" ' > /smilevers/all-databases.sql
3、Redis
七、本地镜像发布阿里云
$ sudo docker login --username=smilevers registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/smilevers/mysql:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/smilevers/mysql:[镜像版本号]
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/smilevers/mysql:[镜像版本号]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)