docker基础安装使用
一、简介
1、虚拟化
Docker 是⼀个开源项⽬,诞⽣于 2013 年初,最初是 dotCloud 公司内部的⼀个业余项⽬。它基于 Google 公司推出的 Go 语⾔实现。 项⽬后来加⼊了 Linux 基⾦会,遵从了 Apache 2.0 协议,项⽬代码在 GitHub 上进⾏维护。
为什么选择Docker?
- (1)上⼿快。
⽤户只需要⼏分钟,就可以把⾃⼰的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应⽤程序也⾮常迅速,可以说达到“随⼼所致,代码即改”的境界。随后,就可以创建容器来运⾏应⽤程序了。⼤多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很⾼的性能,同时同⼀台宿主机中也可以运⾏更多的容器,使⽤户尽可能的充分利⽤系统资源。
- (2)职责的逻辑分类
使⽤Docker,开发⼈员只需要关⼼容器中运⾏的应⽤程序,⽽运维⼈员只需要关⼼如何管理容器。Docker设计的⽬的就是要加强开发⼈员写代码的开发环境与应⽤程序要部署的⽣产环境⼀致性。从⽽降低那种“开发时⼀切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”
- (3)快速⾼效的开发⽣命周期
Docker的⽬标之⼀就是缩短代码从开发、测试到部署、上线运⾏的周期,让你的应⽤程序具备可移植性,易于构建,并易于协作。(通俗⼀点说,Docker就像⼀个盒⼦,⾥⾯可以装很多物件,如果需要这些物件的可以直接将该⼤盒⼦拿⾛,⽽不需要从该盒⼦中⼀件件的取。)
- (4)⿎励使⽤⾯向服务的架构
Docker还⿎励⾯向服务的体系结构和微服务架构。Docker推荐单个容器只运⾏⼀个应⽤程序或进程,这样就形成了⼀个分布式的应⽤程序模型,在这种模型下,应⽤程序或者服务都可以表示为⼀系列内部互联的容器,从⽽使分布式部署应⽤程序,扩展或调试应⽤程序都变得⾮常简单,同时也提⾼了程序的内省性。(当然,可以在⼀个容器中运⾏多个应⽤程序)
2、Docker组件
2.1 Docker服务器与客户端
Docker是⼀个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有⼯作并返回结果。Docker提供了⼀个命令⾏⼯具Docker以及⼀整套RESTful API。你可以在同⼀台宿主机上运⾏Docker守护进程和客户端,也可以从本地的Docker客户端连接到运⾏在另⼀台宿主机上的远程Docker守护进程。
2.2 Docker镜像与容器
镜像是构建Docker的基⽯。⽤户基于镜像来运⾏⾃⼰的容器。镜像也是Docker⽣命周期中的“构建”部分。镜像是基于联合⽂件系统的⼀种层式结构,由⼀系列指令⼀步⼀步构建出来
Docker可以帮助你构建和部署容器,你只需要把⾃⼰的应⽤程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运⾏⼀个或多个进程。我们可以认为,镜像是Docker⽣命周期中的构建或者打包阶段,⽽容器则是启动或者执⾏阶段。 容器基于镜像启动,⼀旦容器启动完成后,我们就可以登录到容器中安装⾃⼰需要的软件或者服务。
Docker也不关⼼你要把容器运到何⽅:我们可以在⾃⼰的笔记本中构建容器,上传到Registry,然后下载到⼀个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱⼀样,Docker容器⽅便替换,可以叠加,易于分发,并且尽量通⽤。
2.3 Registry(注册中⼼)
Docker⽤Registry来保存⽤户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry
叫做Docker Hub
。⽤户可以在Docker Hub注册账号,分享并保存⾃⼰的镜像(说明:在Docker Hub下载镜像巨慢,可以⾃⼰构建私有的Registry)。
https://hub.docker.com/
二、安装Docker
1、安装docker
yum
包更新到最新
yum update
安装需要的软件包
yum-util
提供yum-config-manager
功能,另外两个是devicemapper
驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum
源为阿⾥云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
yum install docker-ce
查看docker
版本
docker -v
2、设置ustc
的镜像
ustc是⽼牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在⽤。ustc的docker镜像加速器速度
很快。ustc docker mirror的优势之⼀就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
编辑该⽂件(本身没有该文件,编辑后即可添加):
vim /etc/docker/daemon.json
在该⽂件中输⼊如下内容:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
3、docker的启动与停止
启动/停止docker
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
开机启动docker
systemctl enable docker
查看docker
概要信息
docker info
查看docker
帮助文档
docker --help
三、常用命令
1、镜像相关命令
1.1 查看镜像
docker images
- REPOSITORY:镜像名称。
- TAG:镜像标签。
- IMAGE ID:镜像ID。
- **CREATED:**镜像的创建⽇期(不是获取该镜像的⽇期)。
- **SIZE:**镜像⼤⼩。
这些镜像都是存储在Docker宿主机的/var/lib/docker⽬录下
1.2 搜索镜像
从网路中搜索镜像
docker search 镜像名称
docker search mysql
-
NAME: 仓库名称
-
DESCRIPTION: 镜像描述
-
STARS: ⽤户评价,反应⼀个镜像的受欢迎程度
-
OFFICIAL: 是否官⽅
-
AUTOMATED: ⾃动构建,表示该镜像由Docker Hub⾃动构建流程创建的
1.3 拉取镜像
从中央仓库下载镜像到本地
docker pull 镜像名称
docker pull mysql
1.4 删除镜像
根据镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi 'docker images -q'
2、容器相关命令
2.1 容器内容查看
查看正在运行容器
docker ps
查看所有容器
docker ps -a
查看最后一次运行的容器
docker ps -l
查看停止的容器
docker ps -f status=exited
2.2 创建与启动容器
创建容器命令:docker run
-
-i: 表示运⾏容器
-
-t: 表示容器启动后会进⼊其命令⾏。加⼊这两个参数后,容器创建就能登录进去。即分配⼀个伪终端。
-
–name: 为创建的容器命名。
-
-v: 表示⽬录映射关系(前者是宿主机⽬录,后者是映射到宿主机上的⽬录),可以使⽤多个-v做多个⽬录或⽂件映射。注意:最好做⽬录映射,在宿主机上做修改,然后共享到容器上。
-
-d: 在run后⾯加上-d参数,则会创建⼀个守护式容器在后台运⾏(这样创建容器后不会⾃动登录容器,如果只加-i -
-
-p: 表示端⼝映射,前者是宿主机端⼝,后者是容器内的映射端⼝。可以使⽤多个-p做多个端⼝映射t两个参数,创建后就会⾃动进去容器)。
1. 交互式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
退出容器
exit
2. 守护式方式创建容器
docker run -di --name=容器名称 镜像名称:标签
# 启动Redis
docker run -di --name=myredis -p 6379:7379 redis
登录守护式容器方式
docker exec -it 容器名称(或容器ID) /bin/bash
# 登录 redis
docker exec -it 35f3bf9a06ef /bin/bash
2.3 启动和停止容器
启动容器
docker start 容器名称(或者容器ID)
# 启动Redis
docker start 35f3bf9a06ef
停止容器
docker stop 容器名称(容器ID)
# 停止Redis
docker stop 35f3bf9a06ef
2.4 文件拷贝
文件拷贝到容器中
docker cp 需要拷贝文件/目录 容器名称:容器目录
容器中文件拷贝出来
docker cp 容器名称:容器目录 拷贝后文件/目录
2.5 查看容器IP地址
docker inspect 容器名称(容器ID)
# 查看Redis的ID
docker inspect 35f3bf9a06ef
直接输出ID
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
# 获取指定IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' 35f3bf9a06ef
2.6 删除容器
docker rm 容器名称(容器ID)
# 先停止容器、然后删除
docker stop 35f3bf9a06ef
docker rm 35f3bf9a06ef
四、常见应用部署
1、MySQL部署
拉取MySQL镜像
docker pull centos/mysql-57-centos7
创建容器
docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
-p
:代表端⼝映射,格式为 宿主机映射端⼝:容器运⾏端⼝-e
: 代表添加环境变量MYSQL_ROOT_PASSWORD
是root⽤户的登陆密码
2、Tomcat部署
拉取Tomcat
docker pull tomcat
创建容器
docker run -di --name=mytomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat
3、Nginx部署
docker pull nginx
创建Nginx容器
docker run -di --name=mynginx -p 80:80 nginx
4、Redis部署
docker pull redis
创建容器
docker run -di --name=myredis -p 6379:6379 redis
五、数据备份和迁移
1、容器持久化为镜像
将运行中容器持久化为镜像
docker commit mynginx mynginx_i
# 持久化Tomcat
docker ps
docker commit 78a69ea6da3a mytomcat_1
2、镜像备份
将镜像保存为tar文件
docker save -o mynginx.tar mynginx_i
# 保存为 mynginx.tar
docker images
docker save -o mynginx.tar mytomcat_1
3、容器持久化为镜像
先删除旧镜像,再执行下面命令恢复镜像
docker load -i mynginx.tar
# 加载镜像
docker load -i mynginx.tar