Docker概述
Docker为什么会出现
环境配置很麻烦,每一个机器又要部署环境(Redis,Mysql…)费时费力,可能出现这种情况,在我的电脑上面可以运行,但是版本更新,导致服务不可用,对于运维而言,考验很大。如果运维人员能够使用我们开发时使用的环境运行项目的话,这样的问题就会迎刃而解。
现在就是,开发部署上线,一套流程做完!
Docker可以解决以上的问题!
Docker的历史
2010年,几个搞IT的年轻人,在美国成立了一家公司dotCloud,做一些pass的云计算服务。LXC有关的容器化技术,他们将自己的技术(容器化技术)命名为Docker。在刚刚诞生的时候没有引起行业的注意,docCloud很难存续。于是,他们决定开放源代码!
2013年,Docker开源了!Docker的优点被越来越多的人发现。于是他火了,几乎每个月都会更新一个版本。
2014年9月。Docker1.0发布!
相对于虚拟机来说,他十分的轻巧,在容器技术之前,我们使用的是虚拟机技术例如VM。通过这个软件我们可以虚拟化出来一台或者多台电脑,但是很笨重。
虚拟机也是虚拟化技术,Docker容器技术,也是一种虚拟化技术。
Docker镜像包含一些最最核心的环境,十分的小巧。基于GO语言开发。
Docker能干嘛
之前的虚拟机技术
- 占用资源很多
- 冗余步骤多
- 启动慢
容器化技术
不是模拟的一个完整的操作系统。
比较Docker和虚拟机技术的不同
- 传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上面安装和运行软件
- 容器内的应用直接运行在宿主机的内容里面,容器没有自己的内核,也没有虚拟我们的硬件,所以就轻便了。
- 每个容器间是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发,运维)
应用更加快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更加便捷的升级和扩缩容
更加简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更加高效的计算资源利用
Docker是内核级别的虚拟化。可以在一个物理机上面可以运行很多的容器实例。服务器的性能能够压榨到极致。
Docker的安装
Docker的基本组成

镜像
就好像是一个模板,通过这个模板来创建容器服务。
容器
Docker利用容器技术,独立运行一个或者一组应用,可以将这个容器理解为一个建议的Linux系统。
仓库
就是存放镜像的地方,分为国外的仓库和国内的仓库。阿里云可以配置镜像加速。
安装Docker
环境准备 安装步骤
卸载旧的版本$ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine需要的安装包sudo yum install -y yum-utils设置镜像的仓库- 下面的地址是官方的地址,很慢的,不建议使用。我们可以使用国内的阿里云的地址$ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo阿里云(推荐)$ sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo清华大学源$ sudo yum-config-manager \--add-repo \https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo更新yum$ sudo yum makecache fast安装最新版本的 Docker(docker-ce是社区版 ee是企业版)$ sudo yum install docker-ce docker-ce-cli containerd.io启动dockersystemctl start docker判断受否安装成功docker version有输出的话成功运行hello-worlddocker run hello-world查看下载的镜像docker images卸载docker1.卸载依赖yum remove docker-ce docker-ce-cli containerd.io2.删除资源rm -rf /var/lib/docker
<br />
配置阿里云镜像加速

第一步:sudo mkdir -p /etc/docker第二步:sudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://qhbhx60b.mirror.aliyuncs.com"]}EOF第三步:sudo systemctl daemon-reload第四步:sudo systemctl restart docker
执行流程
Docker的常用命令
帮助命令
docker version 显示版本信息 dcoker info 显示系统信息,包括镜像和容器的信息 docker 命令 —help 帮助命令
镜像命令
解释
REPOSITORY 镜像的仓库源 tag 镜像的标签 image id 镜像的id created 镜像的创建时间 size 镜像的大小 docker search 搜索镜像 例如docker search mysql docker pull 下载镜像 例如docker pull mysql——表示直接下载mysql的最新版 docker rmi -f imageid 通过镜像id删除镜像 docker rmi -f imageid imageid imageid 通过多个镜像id删除镜像 docker rmi -f $(docker images -aq) 删除全部的容器
容器命令
有了镜像才可以创建容器,下载一个centos的镜像来学习
docker pull centos
新建容并启动
docker run [可选参数] image# 参数说明--name="Name" 容器名字。例如redis1,redis2,用来区分容器-d 后台方式运行-it 使用交互迷失运行,进入容器,查看内容。-p 指定容器的端口 -p8080:8080-p 主机端口:容器端口-P(这个p是大写的) 随机指定端口启动并进入容器docker run -it centos /bin/bash
列出所有的运行的容器
docker ps 列出正在运行的容器 docker ps -a 所有的曾经运行过的容器 docker ps -a -n=1 显示最近创建的1个容器 docker ps -aq 显示所有的容器编号
退出容器
exit 直接停止容器并且退出 ctrl + p + q 容器不停止退出
删除容器
docker rmi -f imageid 通过镜像id删除镜像 docker rmi -f imageid imageid imageid 通过多个镜像id删除镜像 docker rmi -f $(docker images -aq) 删除全部的容器
启动和停止容器的操作
docker start 容器id 启动容器 docker restart 容器id 重启容器 docker stop 容器id 停止当前正在运行的容器 docker kill 容器id 强制停止当前容器
常用的其他命令
后台启动容器
docker run -d 镜像名但是我们发现docker ps centos停止了docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止容器启动后,发现自己没有提供服务,就会立刻停止,就没有程序了
查看日志命令
docker logs
查看容器的进程信息
docker top 容器id
查看镜像元数据
docker inspect 容器id
进入当前正在运行的容器
我们的容器通常是使用后台方式与运行的,需要进入容器,修改一些配置 方式1:docker exec -it 容器id /bin/bash #进入容器后开启一个新的终端 方式2:docker attach 容器id #进入容器正砸执行的终端,不会启动新的进程
从容器类cp文件到主机上面
docker cp 容器id:容器内路径 目的的主机路径
命令小结
可视化
- portainer
docker run -d -p 9000:9000 \ —restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
—name prtainer \
docker.io/portainer/portainer
访问方式
Commit
docker commit :从容器创建一个新的镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
- -a :提交的镜像作者;
- -c :使用Dockerfile指令来创建镜像;
- -m :提交时的说明文字;
- -p :在commit时,将容器暂停。
容器数据卷
什么是容器数据卷
数据在容器里面,如果删除了容器,数据就被删除了。我们希望数据可以持久化,将docker里面产生的数据,同步到本地。
这就是卷技术。也就是目录的挂在,将容器里面的目录,挂载到Linux上面。
容器的持久化合同同步操作,容器间也可以实现数据共享
使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
双向绑定,在Linux里面改文件和在docker里面改文件,都会进行同步
具名挂载和匿名挂载
所有的没有指定挂载路径的卷,默认路径都是在/var/lib/docker/volumes/xxx/_data
通过具名挂载可以方便的找到我们的卷
如何确定是具名挂载还是匿名挂载还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载
拓展

使用Dockerfile进行构建
DockerFile
DockerFile介绍
用来构建docker镜像的文件,参数命令脚本
构建步骤:
- 编写一个dockerfile文件
- docker build构建成为一个镜像
- docker run 运行镜像
docker push发布镜像(docker hub/阿里云镜像仓库)
DockerFile构建过程
每个保留关键字都是大写字母
- 执行顺序从上往下
号 表示注释
- 每一个指令都会构建提交一个新的镜像层,并提交。
DockerFile指令

发布镜像
发布到dockerhub
- dockerhub注册账号
- 在服务器上提交自己的镜像
docker login -u 用户名
- docker push 作者名/版本号
发布到阿里云镜像服务
详情请查看官方文档很详细。
