开发工具-Docker学习
开发工具-Docker学习
完整文章地址
Docker概述
Docker应用
- 部署环境复杂,非常费时费力
- 环境不能跨平台
- docker可以把环境打包成镜像,直接运行即可
- docker通过隔离机制,可以将服务器利用到极致
Docker的功能
-
虚拟机技术
-
容器化技术
-
DevOps(开发 + 运维)
-
应用更加快速的交付和部署
-
更便捷的升级和扩缩容
-
更加简单的系统运维
-
更加高效的计算资源利用
Docker安装
1.Docker基本组成
-
仓库:仓库就是存放镜像的地方
-
镜像:docker镜像就像一个模板,通过镜像可以创建多个容器
-
容器:容器可以独立运行一个或者多组应用(启动,停止,删除)
2.run工作流程
3.Docker工作原理
4.Docker与VM的区别
- Docker的抽象层比虚拟机少
- docker利用的是宿主机的内核,vm需要的是Guest OS(vm每次都要加载操作系统的内核)
Docker命令
1.帮助命令
docker version
docker info
docker --help
2.镜像命令
(1)docker images查看本地主机上的镜像
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
解析:
- REPOSITORY :镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像的id
- CREATED:镜像的创建时间
- SIZE:镜像大小
可选项:
- -a : 列出所有镜像
- -q:只显示镜像id
(2)docker search 搜索镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
可选项,可以过滤搜索结果:
–filter=STARS=3000 :搜索stars大于3000的镜像
(3)docker pull 拉取镜像:tag ,默认拉取最新版
(4)docker rmi 删除镜像名称/id
# 删除mysql镜像
docker rmi -f mysql:5.7
# 递归删除所有镜像
docker -f $(docker images -aq)
3.容器命令
有了镜像我们才能创建容器
(1)新建镜像并启动:dokcer run [可选参数] image
容器内相当于一个新的虚拟环境
docker run -it centos /bin/bash
相关参数:
- –name = “Name” :容器名字,用于区分容器
- -d :后台方式运行
- -it : 使用交互方式运行,可进入容器查看内容(开启容器终端)
- -p:指定容器端口
(2)查看容器:docker ps
docker ps #查看运行中的容器
相关参数:
- -a :查看所有容器(包括已终止的容器)
- -n = ? :显示最近创建的容器
- -q : 只显示容器的编号
(3)退出容器
exit # 容器停止并退出
ctrl + P + Q # 容器不停止退出(按P,Q这个设计多少有点反人类)
(4)删除容器
docker rm 容器id # 删除指定的容器(不能删除运行中的容器,加-f强制删除)
docker rm -f $(docker ps -aq) # 删除所有容器
(5)启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
4.操作命令
(1)后台启动命令
docker容器使用后台运行时(docker run -d centos
),必须要有一个前台进程,如果docker发现自己没有应用了,就会自动停止
(2)查看日志命令
查看容器运行的日志
docker logs -f -t --tail 容器
(3)查看容器进程信息
docker top 容器id
(4)查看镜像元数据
docker inspect 容器id
(5)进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令1:进入容器后开启一个新的终端(相当于开启了另一个进程)
docker exec -it 容器id bashShell
# 命令2:进入容器正在执行的终端中,不会启动新的进程
docker attach 容器id
(6)从容器中拷贝文件到主机上
docker cp 2e18c3e0375a:/home/test.py /home/autovy/桌面
拷贝是一个手动过程,从封闭的容器中拿到需要留存的数据,而使用数据卷
则可以实现自动同步
Docker镜像
推荐文章:docker镜像讲解
1.Portainer可视化工具
2.镜像简介
- 镜像就是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于环境开会的软件(包括代码,运行时,库,环境变量,配置文件)
- 镜像来源:
- 从远程仓库下载
- 自己制作的镜像DockerFile
3.镜像加载原理
(1)联合文件系统(UnionFS)
镜像和容器不同,容器是彼此独立的,而容器是分层叠加的,可以共享相同的底层文件和目录
(2)镜像加载原理
共享底层资源
4.分层理解
基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。该镜像当前已经包含3个镜像层
docker镜像默认只读,当容器启动时,一个新的可写层被加载到镜像顶部
这一层即为容器层,容器之下称为镜像层
5.commit镜像
提交一个新的镜像
docker commit 提交容器成为一个新的副本
# 命令和git原理相似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
容器数据卷
1.数据卷原理
容器之间有一个数据共享技术,Docker容器中产生的数据,同步到本地(从而实现数据可持久化,数据同步操作,数据存储在本地不会随着容器删除而丢失)
其本质是将容器内的目录挂载到主机上
2.数据卷使用
(1)使用命令挂载 -v
docker run -it -v 主机目录地址:容器目录地址
# 测试:将容器的目录挂载到主机目录
docker run -it -v /home/test:/home centos /bin/bash
- 主机和容器没有对应目录时会自动创建目录
- 通过docker inspect 可以查看到挂载信息
- 挂载双方是双向同步关系,他们的文件内容无论哪一方更改,都会保持同步
- 修改文件时,只需要在本地修改即可,不需要进入容器
(2)具名挂载和匿名挂载
除了上文中的指定路径挂载,我们也可以使用具名挂载和匿名挂载
匿名挂载:-v :容器目录地址
具名挂载:-v 卷名:容器目录地址
# 匿名挂载
docker run -d -P --name test1 -v /home/new centos
# 具名挂载
docker run -d -P --name test1 -v mycentos:/home/new centos
# 查看所有卷(可以看到存在匿名卷)
docker volume ls
所有的docker容器内的卷默认放在本地主机的/var/lib/docker/volumes下
(3)挂载权限
# 可以通过 -v 容器路径:ro,rw改变读写权限
ro # 只读,只能通过宿主机来操作,容器内部无法进行操作
rw # 可读可写,默认为可读可写
3.数据卷容器
容器间也可以进行挂载从而实现数据同步,多个子容器的数据可以挂载到一个父容器中,这个父容器就是数据卷容器
–volumes-from即可以让docker3挂载到docker1上
docker run -it --name docker3 --volumes-from docker1 5ce91af318b3 /bin/bash
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
DockerFile
参考文章:DokcerFile命令详解
1.DockerFile简介
DockerFile是构建docker镜像的构建文件,即命令脚本。通过这个脚本我们可以生成一个镜像。
2.DockerFile构建流程
(1)DockerFile内容示例
FROM centos
# 在构建镜像形成两个数据卷,因为没有指定的挂载卷会自动进行匿名挂载
VOLUME ["volume01","volume02"]
CMD echo "-----end------"
CMD /bin/bash
(2)通过DockerFile文件构建镜像
docker build -f dockerfile -t test/centos .
build命令, -f 打开dockerfile文件的路径,-t test/centos命名容器,.即为生成路径
(3)用自己的镜像创建容器
docker run -it 5ce91af318b3 /bin/bash
(4)docker push 发布镜像(开源进行)
3.DockerFile指令详解
(图中最后一项应为CMD指令此处更正)
补充项:
-
CMD:指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
-
ENTRYPOINT:指定这个容器启动时要运行的命令,可以追加命令
-
COPY:类似于ADD,将我们文件拷贝到镜像中
-
ENV:构建的时候设置环境变量
4.创建自己的DockerFile
FROM centos
MAINTAINER Autovy<autovys@gmail.com>
# 设置工作目录为/usr/local
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安装相关依赖
RUN yum -y install vim
RUN yum -y install net-tools
# 开放端口80
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end------"
CMD /bin/bash
通过docker history mycentos:0.1
命令可以查看构建镜像的过程
更多推荐
所有评论(0)