Docker
1、简介
Docker是一个开源的应用容器引擎。
2、核心
docker主机(Host):安装了docker的程序的机器(安装在操作系统之上)
docker客户端(client):客户端通过命令行护着其他工具来使用docker
docker仓库(Register):用来保存各种打包好的镜像
docker镜像(image):软件打包好的镜像,放在docker仓库中
docker容器(Container):镜像启动后的实例称为一个容器。独立运行的一个或者一组应用。
使用步骤
- 1,安装docker
- 2、去docker仓库找到这个软件对应的镜像
- 3、使用docker运行这个镜像,这个镜像就会生成一个docker容器
- 4、对容器的启动停止就是对软件的启动停止
3、安装docker(in Linux)
1、查看centos版本,必须是3.10以及以上版本
uname -r
2、安装docker
yum install docker
3、输入y,确认安装,等待complete来完成安装
4、systemctl start docker来启动docker
docker -v 来查看版本
5、开启启动docker
systemctl enable docker
6、停止docker
systemctl stop docker
4、常用操作
镜像操作
1、搜索docker仓库
docker search mysql
2、现在我们拉去镜像
docker pull mysql:[tag版本]
3、查看所有镜像
docker images
4、删除镜像
docker rmi 镜像id
容器操作
软件镜像-运行镜像(安装程序)-产生容器(正在运行的软件)
1、搜索镜像
docker search tomcat
2、下载镜像【默认tomcat:latest】
docker pull tomcat
3、依据镜像首次开启容器
docker run --name mytomcat -d tomcat:latest
4、查看运行中的容器
docker ps
5、停止容器
docker stop 容器ID
6、查看所有容器
docker ps -a
7、启动容器
docker start 容器id
8、删除容器【必须是停止状态】
docker rm 容器id
9、启动一个端口映射的tomcat
docker run -d -p 8888:8080 tomcat
-d 后台影响
-p 映射端口
10、查看防火墙状态
service firewalld status
11、关闭防火墙
service firewalld stop
12、查看容器日志
docker logs
更多的命令,请参考官方文档
一个镜像可以启动多个容器,并且每一个都是独立的。互不干扰。
5、环境搭建
我们可以在Docker Images在线库中安装我们需要的各种镜像
mysql【错误版本】
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker pull mysql //拉取mysql
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker run --name mysql01 -d 62a9f311b99c//运行mysql
bbe756f0cad3fa02e9ee5f93f05009321ef6d14dddfffd70004f7b188be74074
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker ps//查看运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//发现运行后出现了exited错误。
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker ps -a//查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbe756f0cad3 62a9f311b99c "docker-entrypoint..." 26 seconds ago Exited (1) 25 seconds ago mysql01
//于是我们查看一下日志
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker logs bbe756f0cad3
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
//明白了其实是因为在创建mysql容器的时候没有设定mysql的root密码。或者设定空密码权限与随机密码。
一怒之下我们删除这个镜像
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker rm bbe756f0cad3
bbe756f0cad3
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//现在就没有镜像了
mysql【正确版本(伪)】
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker run --name mysql-1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
0c97c45ddeba7b0e3a4fc6495f70bb622f6fa47eca4a4223505b31092aca126c
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c97c45ddeba mysql "docker-entrypoint..." 4 seconds ago Up 3 seconds 3306/tcp, 33060/tcp mysql-1
[root@ecs-s6-medium-2-linux-20190906163518 ~]#
navicat连接发现还是不行。想了一下原来是因为没有做端口映射
mysql【正确版本】
//停止上一个mysqldocker
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker stop 0c97c45ddeba
0c97c45ddeba
//完全版的运行
[root@ecs-s6-medium-2-linux-20190906163518 ~]# docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
9d6043ae38a7c470e4902e734f61ac362c672a8ceaf1d54b1e74af52ed4b6777
[root@ecs-s6-medium-2-linux-20190906163518 ~]#
ps:若是云端docker,需要到相应的后台开启3306端口的白名单
至此,docker环境下的mysql就搭建完成了。
几个其他的mysql操作
docker run -v my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
//把主机的/my/custom的文件挂载到mysqldocker的/etc/mysql/conf.d文件夹里
改mysql的配置文件就只需要把mysql配置文件放在
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --net=host --restart=always --privileged=true -v /usr/docker_dat/mysql/data:/var/lib/mysql --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /etc/localtime:/etc/localtime:ro -d mysql --lower_case_table_names=1
--restart=always 跟随docker启动
--privileged=true 容器root用户享有主机root用户权限
-v 映射主机路径到容器
-e MYSQL_ROOT_PASSWORD=root 设置root用户密码
-d 后台启动
--lower_case_table_names=1 设置表名参数名等忽略大小写
这样就完成了Mysql的全部docker镜像安装。可以按照这个步骤去安装redis等其他镜像