Docker
Docker基础知识通俗解释
镜像
就像我们装系统一下,需要iso镜像文件,此镜像你可以照搬理解,也是用于安装对应软件。
同一软件可以同时存在多个版本的镜像。比如mysql,我本地可以同时存在5.7版本和8.0版本,安装容器的时候指定版本即可。
容器
我们用镜像安装并成功运行的对象,称之为容器。
而且同一镜像可以同时安装很多个容器,这样就可以很方便的模拟出分布式架构,学习和实践都方便。
常用命令
查看正在运行的容器
docker ps
查看所有已经创建的容器
docker ps -a
列出镜像列表
docker images
启动、停止、重启容器
docker start xxxx
docker stop xxxx
docker restart xxxx
强制删除容器
docker rm -f xxxx
删除镜像
docker images rm xxxx
配置docker镜像与容器安装路径
Docker 版本 >= v17.05.0
停止docker
sudo systemctl stop docker.socket
sudo systemctl stop docker.service
创建docker配置
vim /etc/docker/daemon.json
加入
{
"data-root": "/你要改的路径/docker",
"storage-driver": "overlay2" # 这个是 Docker 是默认设置,这里也可以不用加
}
重启docker
sudo systemctl restart docker.service
MySQL
拉取最新版mysql
docker pull mysql:latest
ARM架构,M1芯片拉去最新版mysql
docker pull mysql/mysql-server:latest
指定版本
docker pull mysql:版本号
验证是否安装mysql镜像
docker images
会看到有mysql的镜像(TAG为你下载时的版本)
安装运行容器
docker run -itd --name mysql -p 8000:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
解释:
run -itd
一般写法,详情查看菜鸟--name mysql
指定容器名称为mysql-p 8000:3306
将内部3306端口映射出去为8000,实际连接时也应上8000-e MYSQL_ROOT_PASSWORD=123456
设置默认root密码为123456- 尾部的
mysql
代表该容器的镜像,如果本地存在多个镜像需要指定版本,如mysql:5.7
这样还没完,mysql默认root是不允许外部连接的,我们需要进入修改。
docker desktop的同学进入容器命令行很方便:
也可以通过命令进入
docker exec -i 69d1 bash
其中69d1
是容器的id,前4位即可
查看容器id
docker ps
mysql的用户操作可以看这篇文章MySQL用户操作
Redis
拉取
docker pull redis:latest
安装并运行
docker run -itd --name redis -p 6379:6379 redis
设置默认密码
docker run -itd --name redis -p 6379:6379 redis --requirepass "mypassword"
RabbitMQ
拉取,这里注意一下rabbitmq:management
是带后台管理界面的,rabbitmq:latest
是不带的。
docker pull rabbitmq:management
安装并运行
docker run -dit --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
MongoDB
拉取
docker pull mongo:latest
安装并运行
docker run -itd --name mongo -p 27017:27017 mongo --auth
进入容器后配置连接账号密码
进入容器后输入下面指令进入
mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')
Elasticsearch & Kibana
创建es专属网络
docker network create es-net
版本较高时,安装Kibana的时候需要和ElasticSearch在同一网段内,我也也推荐这么做。
创建es
docker run -d \
--name elasticsearch \
-e "discovery.type=single-node" \
-v /data/es/data:/usr/share/elasticsearch/data \
-v /data/es/logs:/usr/share/elasticsearch/logs \
-v /data/es/plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 19200:9200 \
-p 19201:9300 \
elasticsearch:7.1.1
-e “cluster.name=es-docker-cluster”:设置集群名称
-e “http.host=0.0.0.0”:监听的地址,可以外网访问
-e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:内存大小
-e “discovery.type=single-node”:非集群模式
-v /data/es/data:/usr/share/elasticsearch/data:本地/data/es/data绑定elasticsearch的数据目录
-v /data/es/logs:/usr/share/elasticsearch/logs:本地/data/es/logs绑定elasticsearch的日志目录
-v /data/es/plugins:/usr/share/elasticsearch/plugins:本地/data/es/plugins绑定elasticsearch的插件目录
–privileged:授予逻辑卷访问权
–network es-net :加入一个名为es-net的网络中
-p 19200:9200:端口映射配置
创建Kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://192.168.1.221:19200 \
--network es-net \
-p 19202:5601 \
kibana:7.1.1
设置服务自启
# docker update --restart=always 容器名或容器ID
docker update --restart=always <CONTAINER ID>
# 例如将tomcat设为自启动
docker update --restart=always tomcat