目录
一、启动相关
1.设置容器开机启动
在我们使用镜像run一个容器的时候,希望这个容器随着docker的启动而启动(我的情况是虚拟机经常开关机,所以docker肯定会经常关闭再开启,所以我run的容器需要跟随docker的启动起来,不想手动一个个启动)
1)设置docker开机自启
systemctl enable docker
2)初次启动容器设置自启
添加如下参数
--restart=always
举例
docker run --restart=always mysql:8.0.30
3)启动容器
如果某个容器停了,可以再次启动
docker restart 容器id
如果run的时候没有加这个参数,后期想让他开机启动,请跳转下方修改相关。
二、查询相关
1.查询所有容器(包括停止的)
docker ps -a
三、修改相关
1.指定容器开机自启动
docker update --restart=always 容器id
四、宿主机与容器交互相关
1.将指定容器内的文件复制到宿主机当前目录下
docker container cp nginx:/etc/nginx .
注意命令最后是空格跟上一个点
五、安装中间件相关
1.mysql
①创建mysql实例并运行
docker run -d -p 3306:3306 --privileged=true \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7
参数说明
–name:表示为当前容器起一个名字
-p3306:3306:将容器的3306端口映射到主机的3306端口
-v/mydata/mysql/conf:/etc/mysgl:将配置文件夹挂载到主机
-v/mydata/mysql/log:/var/log/mysgl:将日志文件夹挂载到主机
-v/mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
-d 表示mysql以后台方式运行
②配置mysql的配置文件
cd /mydata/mysql/conf/
vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重启mysql
docker restart mysql
2.安装redis
①下载redis镜像
docker pull redis:5.0.5
②在宿主中创建目录
mkdir -p /app/redis
③宿主机下初始化redis.conf文件
touch /app/redis/redis.conf
④运行一个redis实例
docker run --restart=always -p 6379:6379 --name redis --privileged=true \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:5.0.5 redis-server /etc/redis/redis.conf
–restart=always:表示每次docker重启后会自启动,其余参数参考上述mysql相关配置
⑤进入redis检查
docker exec -it redis /bin/bash
redis-cli
简单测试
⑥设置持久化策略(虚拟机可选)
这样数据就不是只在内存中了,会持久化到磁盘,防止每次重新启动虚拟机,缓存都没有了。
去宿主机修改对应配置
退出到宿主机
exit
exit
编辑redis.conf文件
vim /app/redis/redis.conf
appendonly yes
重启redis
docker restart redis
测试redis数据是不是会持久化到磁盘
前提是已经修改完配置文件并且已经重启redis实例,先进入redis进行随便一个数据的插入,然后退出到宿主机,重启redis,再次进入redis中发现数据还在则证明配置生效。
3.安装elasticsearch
1.下载es镜像
docker pull elasticsearch:7.4.2
2.在宿主机上创建目录
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/plugins
重新设置文件夹权限,任何用户任何组都有读写权限
chmod -R 777 /mydata/elasticsearch
3.创建elasticsearch.yml文件,并配置
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
4.启动一个实例
docker run --restart=always --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
-p 暴露两个端口
-e 指定一个参数
discovery.type=single-node:表示单节点运行
-Xms64m -Xmx128m:设置es内存初始内存占用64mb,最大占用128mb
-v 挂载,docker容器中的文件和宿主机对应关联上,在容器外部也就是在宿主机进行文件的修改,容器里边的es也会对应修改,不用每次都进入容器内进行操作。
5.验证是否安装成功
浏览器访问如下地址
http://你宿主机的ip地址:9200/
4.安装kibana
1.下载kibana镜像
docker pull kibana:7.4.2
2.运行一个实例
docker run --restart=always --name kibana \
-p 5601:5601 \
--link es容器名称(安装es时起的别名elasticsearch ) \
-e "ELASTICSEARCH_URL=http://宿主机ip地址:9200" \
-d kibana:7.4.2
–link :同一个宿主主机上的多个docker容器之间如果需要进行通信,第一种最容易想到的方式就是使用容器自身的ip地址、宿主主机的ip+容器暴露出的端口号来通信,我们知道默认情况下docker重新run后,对应的IP地址就会改变,这样如果两个容器之间通信就会变得非常麻烦,每次都要修改通信的IP地址。这个时候 --link参数就派上大用场了,它会给要链接的容器设定一个通信的别名,即使重启后IP地址发生了改变,依然可以正常通信。
link 格式:
– link:目标容器名称:别名(别名可以不写)
3.验证是否运行成功
http://宿主机地址:5601/
如果是这个页面,先等一会再访问一下,看看是否启动成功
如果长时间还是这个页面,需要查询相关日志
docker logs 容器ID前三位
情况举例
启动成功页面
5.安装Nginx
1.前期准备
由于nginx要创建的配置多一些,这里先跑一个实例,把配置信息从容器中复制到宿主机。
如果没有Nginx1.10版本,docker会自动下载,这里就不docker pull了
①运行一个临时的Nginx容器
docker run -p 80:80 --name nginx -d nginx:1.10
②宿主机新建目录
mkdir /mydata/nginx
cd /mydata/nginx
③将容器内的配置文件拷贝到当前宿主机目录
cp 后跟的是容器的名称,最后是空格跟上点
格式:docker container cp 空格 容器名 冒号 容器内路径 空格 点
docker container cp nginx:/etc/nginx .
④修改宿主机文件夹名称
mv nginx conf
⑤再次创建nginx目录,并把conf整个移动到该目录下
mkdir /mydata/nginx
mv conf /mydata/nginx
⑥停止容器并删除
docker stop nginx
docker rm nginx
2.运行nginx实例
docker run --restart=always -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10