本文最后更新于29 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
常用命令
- 查询镜像docker search mysql
- 拉取镜像docker pull 镜像名称[:version]
- 删除镜像# 删除一个镜像
docker rmi 镜像名称/id
# 删除多个镜像
docker rmi 镜像名称1/id1 镜像名称2/id2 …
# 删除所有镜像
docker rmi `docker images ‐q` - 创建容器docker run [options] image command [ARG…]options选项: ‐i、‐t、‐d、‐‐name ‐i:交互式容器 ‐t:tty,终端 ‐d:后台运行,并且打印容器id–restart=always:docker 的容器自动在开机启动创建的容器名称不能重复
- 进入容器#方式一
docker attach 容器名称/id (ps:exit,容器停止)
#方式二
docker exec ‐it 容器名称/id /bin/bash (ps:exit,容器不会停止) - 查看容器docker ps:查看正在运行的容器
docker ps ‐a:查看运行过的容器(历史)
docker ps ‐l:最后一次运行的容器 - 停止/启动容器docker start 容器名称/id
docker stop 容器名称/id - 获取容器/镜像的元数据#查看容器/镜像全部信息:
docker inspect 容器/镜像
#查看容器/镜像部分信息:
docker inspect ‐f='{{.NetworkSettings.IPAddress}}’ 容器/镜像
‐f:可通过‐‐format代替 - 删除容器#删除一个容器:
docker rm 容器名称/id
#删除多个容器:
docker rm 容器名称1/id1 容器名称2/id2 …
#删除所有容器
docker rm `docker ps ‐a ‐q`PS:无法删除正在运行的容器 - 查看容器日志docker logs 容器名称/id
- 文件拷贝docker cp 需要拷贝的文件或目录 容器名称:容器目录
例如:docker cp 1.txt c2:/root
- 目录挂载我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。创建容器 添加-v参数 后边为 宿主机目录:容器目录docker run ‐id ‐‐name=c4 ‐v /opt/:/usr/local/myhtml centos如果你共享的是多级的目录,可能会出现权限不足的提示这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 –privileged=true 来解决挂载的目录没有权限的问题docker run ‐id ‐‐privileged=true ‐‐name=c4 ‐v /opt/:/usr/local/myhtml centos
- 创建容器时没有添加参数
--restart=always
,导致的后果是:当 Docker 重启时,容器未能自动启动。docker container update –restart=always 容器名字
14.
1、docker安装MySQL
- 查看mysql可用的版本访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 。可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest 。
- 拉取 MySQL 镜像docker pull mysql:latest
- 查看本地镜像docker images
- 运行容器docker run -itd –name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
- MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
- 查看是否启动成功docker ps
- MySQL 配置vim /mydata/mysql/conf/my.cnf[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=’SET collation_connection = utf8_unicode_ci’
init_connect=’SET NAMES utf8′
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve - 重启mysqldocker restart mysql
- 进入容器docker exec -it mysql bash
- 登录mysqlmysql -u root -p
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’; - 添加远程登录用户CREATE USER ‘root’@’% IDENTIFIED WITH mysql_native_password BY ‘123456’;
alter user ‘root’@’%’ identified with mysql_native_password by ‘123456’; - 授权使用GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION;
2、docker安装Redis
- 查看可用的 Redis 版本访问 Redis 镜像库地址: https://hub.docker.com/_/redis?tab=tags。
- 取最新版的 Redis 镜像docker pull redis
- 查看本地镜像docker images
- 运行容器docker run -itd –name redis -p 6379:6379 redis
- -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务
- 查看运行状态docker ps
- redis-cli 连接测试使用 redis 服务docker exec -it redis /bin/bash
redis-
7.
3、docker安装Elasticsearch
1、取最新版的 elasticsearch镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.1 #存储和检索数据
2、查看本地镜像
docker images
3、运行容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-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 docker.elastic.co/elasticsearch/elasticsearch:7.15.1
-p 9200:9200 -p 9300:9300
:这里是外部访问端口9200,elasticsearch集群内部端口9300-e "discovery.type=single-node"
:以单节点方式启动-e ES_JAVA_OPTS="-Xms64m -Xmx512m"
:设置内存,不然elasticsearch会全部占用,导致死机-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
:这里以它为例,进行目录挂载-d docker.elastic.co/elasticsearch/elasticsearch:7.15.1
:启动容器的名称
4、查看运行状态
docker ps
5、发现突然就挂了,查看日志
docker logs elasticsearch
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:398)
at java.base/java.nio.file.Files.createDirectory(Files.java:700)
at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:807)
at java.base/java.nio.file.Files.createDirectories(Files.java:793)
at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:265)
at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:202)
at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:262)
at org.elasticsearch.node.Node.<init>(Node.java:383)
at org.elasticsearch.node.Node.<init>(Node.java:288)
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:219)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:219)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:399)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:167)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:158)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:75)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:114)
at org.elasticsearch.cli.Command.main(Command.java:79)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:123)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:81)
For complete error details, refer to the log at /usr/share/elasticsearch/logs/elasticsearch.log
ps:没有权限访问config目录
6、添加权限
chmod -R 777 /mydata/elasticsearch/ 保证权限
-R
:遍历改目录下的所有目录
7、重新启动
docker ps -a
docker start 385
8、查看运行状态
docker ps
9、外网访问 http://虚拟机ip:9200/
{
"name" : "3859b80b5c1a",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "dSKyudV8Qleuc_CXEIYvkA",
"version" : {
"number" : "7.15.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
"build_date" : "2021-10-07T21:56:19.031608185Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
11、运行kibana
4、docker安装Kibana
- 取 kibana镜像docker pull docker.elastic.co/kibana/kibana:7.15.1
- 运行kibanadocker run –name kibana -e ELASTICSEARCH_HOSTS=http://192.168.222.129:9200 -p 5601:5601 \
-d docker.elastic.co/kibana/kibana:7.15.1ELASTICSEARCH_HOSTS
:elasticsearch的安装服务器ip
- 访问访问:http://ip:5601/
5、docker安装Nginx
1、启动一个nginx的实例,如果不存在实例,则会安装再启动
docker run -p 80:80 --name nginx -d nginx
2、将容器内的配置文件拷贝到当前目录,后面有个点
docker container cp nginx:/etc/nginx .
3、修改文件名称,把这个conf 移动到/mydata/nginx 下
mv nginx conf
4、终止原容器
docker stop nginx
5、删除容器
docker rm nginx
6、创建新的nginx
docker run -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
给nginx 的html 下面放的所有资源可以直接访问
6、docker安装Tomcat
1、正常安装
1、搜索镜像
docker search tomcat
2、拉取镜像
docker pull tomcat
3、查看镜像
docker images
4、创建容器示例
docker run -it -p 8080:8080 tomcat
- -p 小写,主机端口:docker容器端口
- -P 大写,随机分配端口
- i:交互
- t:终端
- d:后台
PS:宿主机8080映射到容器内的8080端口
测试
访问http://[ip]:8080/
解决
- 可能没有映射端口或者没有关闭防火墙
- 查看tomcat文件,把webapps.dist目录换成webapps
- 先后台启动tomcatdocker run -d -p 8080:8080 tomcat
- 进入容器内部docker exec -it tomcat /bin/bash
- 查看文件目录,webapps.dist目录换成webappsroot@90c2f8c553b0:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@90c2f8c553b0:/usr/local/tomcat# rm -f webapps
rm: cannot remove ‘webapps’: Is a directory
root@90c2f8c553b0:/usr/local/tomcat# rm -r webapps
root@90c2f8c553b0:/usr/local/tomcat# mv webapps.dist webapps
root@90c2f8c553b0:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp work
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps
root@90c2f8c553b0:/usr/local/tomcat# - 重新访问:http://[ip]:8080/
2、免修改版
拉取镜像
docker pull billygoo/tomcat8-jdk8
创建容器
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
8、docker安装Nacos
- 查看可用的版本docker search nacos
- 拉取最新的版本# 下载镜像 https://hub.docker.com/ docker 官方搜索查看有哪些 nacos 镜像版本
docker pull nacos/nacos-server - 启动容器,以单例模式启动docker run -d -p 8848:8848 –env MODE=standalone –name nacos nacos/nacos-server
- 访问:http://192.168.130.135:8848/nacos
- 如果出现404,则是没有开放对应的端口#查看开放端口
firewall-cmd –list-port
#防火墙开放8848端口
firewall-cmd –zone=public –add-port=8848/tcp –permanent
#重启防火墙
firewall-cmd –reload
- 为Nacos配置数据库,不然未启动30天后配置就消失了
- 修改容器的配置文件#执行如下命令进入配置nacos
docker exec -it nacos bash
#修改conf/application.properties文件,可以修改可以覆盖如下
#注意如果mysql也是使用docker启动的,需要指定mysql在docker中的ip,这里我只需要一个主数据库配置
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t “%r” %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true记得重启容器docker restart nacos
- 修改容器的配置文件#执行如下命令进入配置nacos
- 启动时配置docker run -d \
-e TZ=”Asia/Shanghai” \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=192.168.101.11 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=root \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos-config \
-e MYSQL_SLAVE_SERVICE_HOST=192.168.101.11 \
-p 8848:8848 \
–expose=8848 \
–name nacos \
–restart=always \
-v /root/nacos/standalone-logs/:/home/nacos/logs \
nacos/nacos-server:1.1.0具体配置参数参考官方文档,这里有个注意的是MYSQL_SLAVE_SERVICE_HOST
也需要配置
7、docker安装Elasticsearch-head
- 搜索镜像docker search elasticsearch-head
- 拉取镜像docker pull mobz/elasticsearch-head:5
- 运行容器docker run –name es-head -d -p 9100:9100 mobz/elasticsearch-head:5
- 访问是否正常:http://192.168.130.135:9100/
9、docker安装Seata
docker镜像仓库:https://hub.docker.com/r/seataio/seata-server/tags
- 搜索镜像docker search seataio/seata-server:1.5.0
- 拉取镜像docker pull seataio/seata-server:1.5.0
- 运行docker run -itd –name seata-server -p 8091:8091 -p 7091:7091 seataio/seata-server:1.5.0
妈的,写这么好