1.是由go语言开发的工具,可以实现轻量化的环境搭建及项目部署。
2.docker的核心:
仓库:存放打包好的镜像文件,用于共享。镜像文件的下载方式一般是通过docker服务提供的方法。
镜像:将代码、依赖包和所需要的环境整体打包生成的文件。
容器:通过镜像文件反向生成可以运行的环境。它和linux系统独立。
docker安装:
(1)linux内核版本:要求3.8以上
uname -r
(2)更新yum:
yum update
(3)docker依赖插件安装
yum install -y yum-utils device-mapper-persistent-data lvm2
(4)配置国内镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(5)docker 下载
yum install -y docker-1.13.1-162.git64e9980.el7.centos.x86_64
(6)启动|禁用|停止|重启|启动
systemctl enable|disable|stop|restart|start docker
(7)docker镜像获取:
-
在dockerhub站点上查找应用及指定版本、hub-stage.docker.com/
-
通过docker命令搜索默认仓库
docker search 应用名称
docker search mysql56 -
通过命令拉取镜像:
docker pull 镜像名
docker pull docker.io/1s22s22p6/mysql56
(8) 查看镜像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/1s22s22p6/mysql56 latest e71b6ea26d66 7 years ago 473 MB
(9)创建mysql容器:
docker run -选项 镜像名|镜像id
选项:
--name 容器名称
-d 后台运行
-p 端口映射
-e 使用密码
--privileged 使用权限
docker run -d --name=mysql56 -p 3307:3306 --privileged -e MYSQL_ROOT_PASSWORD=123456 e71b6ea26d66
(10)查看容器:
docker ps 查看正在运行的容器
docker ps -a 查看所有的容器(包含没有运行的)
(11)停止容器:
docker stop 容器名
docker stop mysql56
(12)开启容器:
docker start 容器名
docker start mysql56
(13)容器删除:
容器未运行:
docker rm 容器名
容器正在运行:
docker rm -f 容器名
(14) 进入容器
docker exec -it 容器名 bash
docker exec -it mysql56 bash
(15)远程授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
(16)如何删除镜像:
docker rmi 镜像名|镜像id
(17)tomcat容器:
docker pulldocker.io/kubespheredev/tomcat85-java8-centos7
docker run -d --name=tomcqt8 -p 8080:8080 -v /opt/webapps:/usr/local/tomcat/webapps docker.io/kubespheredev/tomcat85-java8-centos7
向/opt/webapps目录下放入woniusales.war文件。
进入容器。修改配置文件
容器数据卷
作用:
卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此
能够绕过 Union File System , 提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂
载的数据卷。
特点:
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
所以:总结一句话: 就是容器的持久化,以及容器间的继承和数据共享!
使用数据卷
方式一:容器中直接使用命令来添加 挂载
# 命令
docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名
# 测试
[root@kuangshen ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
查看数据卷是否挂载成功 docker inspect 容器id
使用 docker 安装 mysql
# 1、搜索镜像
[root@kuangshen ~]# docker search mysql
# 2、拉取镜像
[root@kuangshen ~]# docker pull mysql:5.7
# 3、启动容器 -e 环境变量!
# 注意: mysql的数据应该不丢失!先体验下 -v 挂载卷! 参考官方文档
[root@kuangshen home]# docker run -d -p 3310:3306 -v
/home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# 5、查看本地的 /home/mysql 目录
[root@kuangshen data]# pwd
# 6、删除mysql容器
[root@kuangshen data]# docker rm -f mysql01 # 删除容器,然后发现远程连接失败!
注意:如果访问出现了 cannot open directory: Permission denied 解决办法:在挂载目录后多加一个 --privileged=true参数即可
匿名和具名挂载
# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume维护
docker volume ls
# 具名挂载
-v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看挂载的路径
[root@kuangshen ~]# docker volume inspect nginxconfig
# 改变文件的读写权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx