docker初识
初识docker
我们写代码的时候会接触到多个环境:开发环境
(程序员自己写代码的环境),测试环境
(在别人那边测试代码可行与否),生产环境
(部署代码)
但是,我们可能在本机跑可以,在别人的电脑就不行了,这可能是因为电脑的环境不同,可能使用了某一个库,而你没有安装,就会导致水土不服
所以就出现了 容器
容器直接将
代码和运行
的环境打包,发给别人,别人使用的就都是同一套环境
docker 概念
- docker是一个开源的
应用容器引擎
- docker容器可以让开发者打包自己的应用以及依赖包到一个轻量级,可移植的容器中,发布到任何linux机器上
- docker开销很低
- docker,不同的容器间是相互隔离,互不影响
总而言之:
docker是为了解决软件跨环境迁移的问题
安装docker
ubuntu上可以阅读 ubuntu安装docker
docker架构
- clients
docker就是一个客户端,我们之后就通过docker发送命令给
守护进程
- Host
image
:镜像:就是把软件和软件的运行环境打包到一个镜像文件中container
:容器,容器是镜像的实体,容器可以被创建
,启动
,停止
,删除
,暂停
等
image
和container
的关系将相当于类和对象的关系根据
image
镜像文件,可以创建出很多docker
运行容器容器一旦有了,这些软件也就自然有了
- Registries
image
都是要从远程拉取到本地才能使用,寄存在远程仓库进行集中处理我们还可以
搭建私有的仓库
,里面可以放我们自己的image
镜像加速
应为docker很多镜像都是在国外的,拉取速度比较慢,所以我们可以使用镜像加速
浏览 docker镜像加速,进行配置
docker命令
进程服务相关命令
启动docker
1 |
|
观察docker状态
1 |
|
停止docker
1 |
|
重启docker
1 |
|
设置开机自动启动
1 |
|
镜像相关文件命令
本地查看镜像文件
1 |
|
- repository:
hello-world
,就是一个镜像文件,里面打包了很多软件
和运行环境
- tag:就是这个镜像文件的版本号
- id:就是镜像的id
- create:创建的时间
- size:镜像的大小
查看本地的所有镜像id
1 |
|
搜索镜像文件
1 |
|
搜索是否有redis镜像文件
name
;搜索到和redis相关的镜像文件名
description
:该文件的描述
official
:是否是官方的
下载镜像文件
1 |
|
:后面指定要下载的版本
如果没有指定的话,就是下载最新版本
可以登陆docker官方网站,搜索对应要下载的镜像名,查看版本号,添加在:后面即可
删除对应的镜像
1 |
|
后面是要删除的镜像id
容器相关的命令
通过镜像文件实例出对应的对象
- 创建容器
1 |
|
1 |
|
- -i :保持容器一直运行着,如果没有加的话,没有客户端连接,容器就会自动关闭,在容器关闭的时候自动关闭容器
- -t:启动的时候可以添加一个终端
- -d: 启动的时候不会自动进入容器,会在后台运行,退出之后容器不会关闭
- –name=c1:给这个容器起名字为c1
- redis :就是我们要启动的容器对应的镜像文件,可以在镜像文件后添加:,附带上版本号
- /bin/zsh :进入容器的初始化指令
回车之后就进入了一个docker容器,就是一个linux的环境
进入容器
这个是需要使用-d创建出来的容器1
2sudo docker exec -it c3 /bin/bash
进入到c3这个容器中,/bin/bash后面就是指定的命令
退出
1
exit
查看容器
查看历史上登陆过的所有容器
1
docker ps -a
- container id:容器的id
- image:容器对应的镜像
- command:进入容器对应的命令
- names:容器的名字
查看正在在线的容器
1
docker ps
启动容器
停止容器
1
sudo docker stop c3
c3就是我们要关闭的容器名
删除容器
1
sudo docker rm c3
c3就是我们要删除的容器的名字
我们不能删除一个正在运行的容器
查看容器的信息
1
sudo docker inspect c2
容器的数据卷
数据卷概念
数据卷是宿主机的一个
目录
或文件
当容器目录和数据卷目录绑定之后,对方的
修改会进行同步
在容器里面的修改,宿主机上也能看到相应的变化,同样,宿主机上的变化,在容器里面也能看到
一个数据卷可以被多个容器挂载
解决了多个容器之间的数据交互
一个容器可以挂载多个数据卷
数据卷的作用
- 实现了容器数据的持久化
- 外部机器和容器之间可以间接通信
- 容器之间可以实现数据交互
- 新容器挂载上原有已经存在的数据卷,可以共享里面存在的数据
配置数据卷
1 |
|
1 |
|
数据卷容器
多容器进行数据交互
- 多个容器可以挂载到同一个数据卷上
- 可以使用一个数据卷容器
数据卷容器就是一个容器,挂载到数据卷上,然后别的容器挂载到自己上,进行数据交互
相当于数据卷容器创建了宿主机目录的快捷方式,然后把快捷方式复制到了挂载的容器上,所以即使这个数据卷容器挂了也没有影响
本质就是
去中心化
同时,当容器需要挂载多个目录的时候,新容器可以照搬老容器的所有挂载,提高效率
配置数据卷容器
启动c3数据卷容器,使用-v 参数设置数据卷
1
sudo docker run -it --name=c3 -v /volume redis
传建启动c2,c1容器,使用
--volumes-from
参数来继承数据卷容器1
sudo docker run -id --name=c1 --volumes-from c3 redis