1、Docker简介
官网的介绍是“Docker is the world’s leading software container platform.”官方给Docker的定位是一个应用容器平台。
Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响。
容器和虚拟机比较
特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为GB性能接近原生硬件弱鸡系统支持量单机可跑几十个容器单机几个虚拟OS运行环境主要在Linux主要在window
相同:容器和虚拟机都是虚拟化技术,具备资源隔离和分配优势
不同:
- Docker虚拟化的是操作系统,虚拟机虚拟化的是硬件
- 传统虚拟机可以运行不同的操作系统,Docker主要运行同一类操作系统(Linux)
Docker的基本概念
宿主机: 安装Docker守护进程的Linux服务器,称之为宿主机;
镜像(Image): Docker 镜像,就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
容器(Container): 镜像运行之后的实体,镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository): 仓库可看成一个镜像控制中心,用来保存镜像。
2、Docker安装与启动
1、查看电脑上是否已经安装Docker
yum list installed | grep docker
2、安装docker
yum -y installdocker
3、查看安装版本
docker -v
4、启动docker
systemctl命令是系统服务管理器指令
systemctl start docker
5、停止docker
systemctl stop docker
6、重启docker
systemctl restart docker
7、查看docker状态
systemctl status docker
8、开启自启
systemctl enabledocker
9、查看docker概要信息
docker info
10、镜像加速
默认情况,将从docker hub(https://hub.docker.com/)下载docker镜像太慢,一般都会配置镜像加速器,这里有两种国内镜像可以提供:
编辑docker下的daemon.json文件
vim /etc/docker/daemon.json
在该文件中输入如下内容:
中科大
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
阿里云
{"registry-mirrors":["https://3ad96kxd.mirror.aliyuncs.com"]}
3、Docker常用命令
1、镜像相关
查看镜像
docker images
搜索镜像
docker search 镜像名称
拉取镜像
docker pull 镜像名称:版本
删除镜像
docker rmi 镜像id
删除之前要确认此镜像已经没有被容器在使用,如果存在正在运行的docker容器,删除会报错 “Error: container_delete: Impossible to remove a running container, please stop it first”
批量删除镜像
docker rmi `docker images -q`
2、容器相关
查看正在运行的容器
dockerps
查看所有容器(查看正在运行的和已经停止运行的)
dockerps –a
查看最后一次运行的容器
dockerps –l
查看停止的容器
dockerps -f status=exited
3、创建和启动容器
创建容器命令:
docker run 参数 镜像名称:镜像标签 /bin/bash
创建容器常用的参数说明:
命令参数详解
-i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动。
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果 只加it两个参数,创建后就会自动进去容器)。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录 或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射,例如: 可以将Docker中Tomcat容器的8080端口映射到宿主机上的某一个端口8080,那么以后访问tomcat只需 要:http://宿主机的IP:8080/
进入容器之后,初始化执行的命令:/bin/bash;可写可不写
交互式容器
使用交互式运行容器,容器运行后直接进入到容器内部,退出容器内部后,容器直接关闭只有第一次才会这样,以后再启动容器就是一个守护式的。
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
退出当前容器
exit
守护式容器
docker run -di --name=容器名称 镜像名称:标签 /bin/bash
登录容器/进入容器的目录
dockerexec -it 容器名称(或容器id) /bin/bash
注:这里的登陆容器之后执行的脚本/bin/bash必须写
停止容器
docker stop 容器名称(容器id)
启动容器
docker start 容器名称(容器id)
文件拷贝
将宿主机的文件拷贝到容器内可以使用cp命令
dockercp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
dockercp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
docker run -di -v 宿主机目录:容器目录
查看容器ip
docker inspect 容器名称(容器id)
删除容器
dockerrm 容器名称(容器id)
4、Docker数据卷
数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。
简单来说数据卷本质其实是共享文件夹,是宿主机与容器间数据共享的桥梁。
作用
- 容器数据持久化
- 外部机器和容器间接通信
- 容器之间数据交换
1、1个容器挂载1个数据卷
创建启动容器时,使用 –v 参数 设置数据卷
docker run ... -v 宿主机目录:容器内目录
注意事项:
- 目录必须是绝对路径
- 如果宿主机目录不存在,会自动创建
- 可以挂载多个数据卷
例:
#拉取centos镜像 docker pull centos:7
#安装启动容器并挂载 docker run -di --name=c1 -v /root/host_data1:/root/c1_data centos:7 /bin/bash
#查看容器已挂在的数据卷docker inspect 容器名称(容器id)
2、1个容器挂载多个数据卷
docker run -di --name=c1 -v /root/host_data1:/root/c1_data1 -v /root/host_data2:/root/c1_data2 centos:7 /bin/bash
3、多个容器挂载1个数据卷
docker run -di --name=c2 -v /root/host_data_common:/root/c2_data centos:7
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7
4、多个容器挂载1个容器
##创建启动c3数据卷容器,使用 –v 参数 设置数据卷 docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7 /bin/bash
##创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷 docker run -di --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -di --name=c2 --volumes-from c3 centos:7 /bin/bash
5、在Docker中部署软件
1、MySQL部署
## 搜索mysql镜像docker search mysql
## 拉取mysql镜像docker pull mysql:5.7
## 创建容器、设置端口映射、目录挂载、设置mysql初始密码docker run -di --name=mysql -p 3307:3306 -v root/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD =123456
mysql:5.7
## 进入容器、操作mysqldockerexec -it mysql /bin/bash
然后就可以通过数据库连接软件进行连接了,注意端口号是3307
2、tomcat部署
## 搜索tomcat镜像docker search tomcat
## 拉取tomcat镜像docker pull tomcat:8
## 创建容器,设置端口映射、目录映射docker run -di --name=mytomcat -p 8080:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8
然后使用外部机器访问Tomcat,测试部署服务
3、Nginx部署
## 搜索Nginx镜像docker search Nginx
## 拉取Nginx镜像docker run -di --name=mynginx -p 80:80 nginx
测试访问即可
4、Redis部署
## 搜索redis镜像docker search redis
## 拉取redis镜像docker pull redis
## 创建容器,设置端口映射docker run -id --name=c_redis -p 6379:6379 redis
使用外部机器连接redis,测试
6、镜像备份
容器保存为镜像
docker commit {正在运行容器名称/容器ID}{镜像名称}:{镜像标签}
镜像备份
docker save -o {压缩包存放路径}{镜像名称/镜像ID}# 举例 docker save -o redis.tar redis:version_lagou_1.0.0
#压缩包在生产环境下会还原为一个 image,还原之后的name和tag # -o :输出到的文件
镜像恢复
## 恢复镜像docker load -i {备份的镜像文件}
版权归原作者 小默有礼 所有, 如有侵权,请联系我们删除。