1.Dockers概述
1.1简介
Docker是一个开源的,基于GO语言开发,LXC技术搭建的容器引擎。
1.2Docker特点
隔离环境,资源和系统环境隔离,容器不影响宿主机。
沙箱机制,不同集装箱不会影响,每个集装箱都是一个运行环境。
便携易移植,可以在不同的平台的不同的docker环境下使用。
轻量且性能高,一个机器上可运行多个docker容器,共享资源,占用内存少。
易扩展,可以增加和自动分发容器副本。
可堆叠,可以垂直堆叠服务并及时堆叠服务。
1.3Docker目标
提供一次性的环境,提供单元测试和构建的环境。
提供弹性的云服务,可以随时开关,适合动态扩缩容。
组建微服务架构,多个容器,一个机器跑多个服务。
解决问题:环境管理复杂,云时代软件管理,虚拟化手段的需求,LXC的便携性。
1.4容器和虚拟机
虚拟机 Docker
尺寸 大 小
启动 慢 快
整合 困难半天 方便秒级
2.安装和启动
安装环境,Linux虚拟机,推荐centos7以上。
查看是否安装过
yum list installed | grep docker
删除旧版本
相关的都删除
yum remove docker-ce
分别删除
sudo yum remove docker-ce \docker-ce-cli \
清除默认的docker目录
其中包含之前的镜像和容器文件,配置等
rm -rf /var/lib/docker
安装一些必要的系统工具
sudo yum install -y
yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存
sudo yum makecache fast
手工查看并删除用户创建的配置文件
必须先更新yum源,否则找不到docker-ce,只能找到docker
查看所有仓库中所有docker版本
yum list docker-ce --showduplicates|sort -r
直接安装Docker CE
yum -y install docker-ce
或选择安装64位的版本:
yum install docker-ce.x86_64
或选择特定版本安装,比如这里的版本是19.03.0.ce:
yum -y install docker-ce-19.03.0.ce
启动与停止
systemctl stop docker 停止
systemctl start docker 启动
dockersystemctl restart docker 重启docker服务
systemctl status docker 查看状态
docker info 查看信息
systemctl enable docker 开机启动
docker --help 查看所有命令
3.操作准备
3.1Docker的几个对象概念
镜像,docker容器的基石,类似虚拟机镜像。
容器,镜像的运行实例,是一个运行环境。
注册中心,保存用户构建的镜像,官方Docker Hub。
仓库,注册中心服务器是放仓库的地方,通过标签来区分。
3.2注册中心国内加速镜像Mirror的配置
常见的加速镜像地址:
中科大Docker加速镜像地址:
https://docker.mirrors.ustc.edu.cn
中科大Docker加速镜像官网说明:https://lug.ustc.edu.cn/wiki/mirrors/help/docker
中科大Linux加速镜像官网说明:
https://mirrors.ustc.edu.cn/
Docker中国官方镜像加速-地址:
https://registry.docker-cn.com
Docker中国官方镜像加速-官网说明:
https://www.docker-cn.com/registry-mirror
编辑daemon.json文件
vi /etc/docker/daemon.json
在配置文件中加入
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
配置完成重启docker服务
systemctl daemon-reload && systemctl restart docker
4.Image镜像操作
查找 docker search centos
拉取 docker pull centos
查看 docker images docker images centos
删除 docker rmi imagedocker rmi centosdocker rmi id
5.Container容器操作
5.1查看容器
docker ps 查看运行的
docker ps -a 查看所有
5.2容器创建
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项 镜像 命令 额外参数 中括号非必填
5.2.1交互式容器
创建一个由于测试的容器,容器创建成功后自动分配伪终端,可进行人际交互。
用于测试或者临时演示。
优点:创建完容器后,自动运行容器,可以直接进入到子容器系统中操作,主要用于测试使用。
缺点:当退出子容器后,该容器会自动停止运行。
docker run -i -t centos:7.6.1810 bash
-i打开标准输入
-t 分配一个伪终端bash
- t后面一定要加bash
docker run -it --name=mycentos centos:7.6.1810 bash
或docker run -i -t --name=mycentos centos:7.6.1810 bash
或docker run --interactive=true --tty=true --name=mycentos centos:7.6.1810 /bin/bash
5.2.2守护式容器
创建一个需要长期运行的容器,就可以创建一个守护式容器。
docker run -i -t --name=mycentos centos:7.6.1810 bashdocker run -id --name=mycentos2 centos:7.6.1810
5.2.3登录守护式容器方式
docker exec -it mycentos2 bash
优点:从守护式容器中退出,不影响容器的运行
缺点:必须手动的命令
进入到容器交互式容器使用后再启动就变成了守护式容器。
5.3容器停止启动
docker stop mycentos2
docker stop id
docker restart [OPTIONS] CONTAINER [CONTAINER...]
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]
5.4文件拷贝
拷进去
touch test.txtdocker cp test.txt mycentos2:/rm -f test.txt
拷出来
docker cp mycentos2:/test.txt ./
5.5目录映射挂载
宿主机的目录挂载映射到容器中。
宿主机的目录必须是以/或~开头
docker run -v 宿主机目录
:容器目录
[–read-only] image
mkdir myvolume
docker run -id --name=mycentos3 -v /root/myvolume:/myvolume centos:7.6.180
5.6可能遇到的问题:
如果你共享的是多级目录,挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”,可能会出现权限不足的提示。
解决方案:一.指定–privileged参数,以特权方式启动容器(推荐)
docker run -id --name=mycentos3 -v /root/myvolume:/myvolume --privileged centos:7.6.1810
或docker run -id --name=mycentos3 -v /root/myvolume:/myvolume --privileged=true centos:7.6.1810
二.关闭centos7的安全模块selinux(了解)
临时关闭
setenforce 0
永久关闭
修改/etc/selinux/config或/etc/sysconfig/selinux文件,
将SELINUX的值设置为disabled。
#默认值是enforcingSELINUX=disabled#注释掉这行(可选)#SELINUXTYPE=targeted
保存,退出,重启系统
5.7容器删除
docker stop mycentos3
docker rm mycentos3
docker rm id
docker rm -f mycentos2
docker ps -a -q 查询id
docker rm -f `docker ps -aq` 全删
6.部署案例
6.1Redis的部署
docker pull redis:5.0.5
docker images
docker run -d --name=my_redis -p 6379:6379 redis:5.0.5redis-cli -h 192.168.37.134 -p 6379
6.2MySql的部署
docker pull mysql:8.0.17
docker run -di --name=my_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.17
#e 环境
docker ps
docker exec -it my_mysql bash
mysql -u root -p
可能出现问题:
MySql8的默认密码加密策略发生了变化,之前的一些客户端的软件会出现无法登录的情况
解决方案:使用MySql原生的客户端登录,使用之前的密码加密策略重新修改密码#本地登录(如果仅仅用原生的命令行在本地登录的话,可不用改)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
远程登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
创建容器的时候,直接指定MySql的默认认证插件使用
mysql_native_password:docker run -di --name=my_mysql2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.17 --default-authentication-plugin=mysql_native_password
6.3Tomcat部署
docker pull tomcat:8.5.43
docker run -d --name=my_tomcat -p 9001:8080 tomcat:8.5.43
docker run -id --name=my_tomcat -p 9001:8080 -v ~/myvolume:/usr/local/tomcat/webapps tomcat:8.5.43
6.4部署web应用
将程序拷贝到宿主机的~/myvolume下面
docker run -id --name=my_tomcat3 -p 9003:8080 -v ~/myvolume:/usr/local/tomcat/webapps --privileged=true tomcat:8.5.43
比如:再建立目录myapp,里面编辑一个index.html页面作为测试主页
mkdir myapp
cd myapp/
vim index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
我是docker中的tomcat应用的页面!
</body>
</html>
在虚拟机的宿主机上的浏览器地址栏中输入:http://192.168.37.131:9001/myapp (用自己的虚拟机地址)
7.备份与迁移
7.1容器提交新镜像
docker images
docker ps
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit my_redis myredis:1.0.1
docker imagesdocker run -d --name=my_redis2 -p 6380:6379 myredis:1.0.1
docker ps
7.2镜像保存
docker save [OPTIONS] IMAGE [IMAGE…]
docker save -o myredis-1.0.1.save.tar
7.3镜像加载
docker load [OPTIONS]
docker load -i myredis-1.0.1.save.tar
更多精彩分享,请访问个人博客Mingju’s Lab。