一、Docker是什么?
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
镜像:
Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
容器:
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
仓库:
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
二、常用命令
-
拉取镜像
docker pull mysql:8.0
-
查询镜像列表
docker images
-
删除镜像
docker rmi mysql:8.0
-
运行容器(配置文件在第三步)
docker run --restart=always \ --name mysql \ --privileged=true \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/log:/var/log \ -v /data/mysql/mysql-files:/var/lib/mysql-files \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD='123456' \ -d mysql:8.0
运行参数:
- –restart=always:docker运行后自动启动
- no:容器退出时不重启
- on-failure:容器故障退出(返回值非零)时重启
- always:容器退出时总是重启
- –name:指定容器名字,后续可以通过名字进行容器管理
- –privileged=true
- privileged关键字是docker 0.6版本中引入
- 使用该参数container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
- privileged启动的容器,可以看到很多host上的设备,且可以执行mount
- 用于Docker应用容器获取宿主机root权限(特殊权限),如:挂载目录时,需要加入此关键字
- /v:映射宿主机资源到容器内部
- -p:指定宿主机端口号和容器内部端口号(宿主机:容器内部)
- -e:指定环境变量,容器中可以使用该环境变量
- -d:指定镜像
- -net=“bridge”, 容器网络设置:
- bridge 使用docker daemon指定的网桥
- host //容器使用主机的网络
- container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
- none 容器使用自己的网络(类似–net=bridge),但是不进行配置
- –restart=always:docker运行后自动启动
-
查询正在进行的容器
docker ps
-
查询所有容器
docker ps -a
-
启动容器
docker start mysql
-
停止容器
docker stop mysql
-
重启容器
docker restart mysql
-
删除容器
docker rm mysql
-
强制删除正在运行的容器
docker rm -f mysql
-
查询容器运行日志
docker logs -f mysql
-
进入容器内部
docker exec -it mysql bash
三、MySQL配置文件
mkdir -p /data/mysql/conf
touch my.cnf
vim my.cnf
[mysql]
#设置mysql客户端默认字符集
default-character-set=UTF8MB4
[mysqld]
#设置3306端口
port=3306
#允许最大连接数
max_connections=200
#允许连接失败的次数
max_connect_errors=10
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=UTF8MB4
#开启查询缓存
explicit_defaults_for_timestamp=true
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#等待超时时间秒
wait_timeout=60
#交互式连接超时时间秒
interactive-timeout=600