Docker
Docker
虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行
环境,容器之间互相隔离。
卸载系统之前的Docker
Docker安装文档: https://docs.docker.com/install/linux/docker-ce/centos/
1、卸载系统之前的docker
1、卸载系统之前的docker|
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装docker
2、安装docker 依赖的包
2、安装docker 依赖的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3、使用以下命令建立稳定的存储库。
docker安装地址:https://download.docker.com/linux/centos/docker-ce.repo
3、使用以下命令建立稳定的存储库。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4、安装docker
4、安装docker 安装的过程中所有选项都敲回车Enter
sudo yum install docker-ce docker-ce-cli containerd.io
5、启动docker
5、启动docker
sudo systemctl start docker
/*开机自启*/
sudo systemctl enable docker
6、通过运行hello-world映像验证Docker Engine-Community是否已正确安装。
sudo docker run hello-world
7、配置镜像加速
阿里云—控制台—左侧工具栏—容器镜像服务—配置镜像加速器—选择CentOS
//创建目录
sudo mkdir -p /etc/ docker
//配置加速器 每个人的加速器都不一样,需要自己去阿里云复制
sudo tee / etc/ docker/ daemon. json <<-’ E0F’
{
’ registry-mirrors": [“https: //xxx.mirror.aliyuncs.com”]
}
EOF//重启docker的后台线程
sudo systemctl daemon-reload
//重启docker容器
sudo systemctl restart docker
docker基本命令
----------------------------------docker操作----------------------------
查看运行容器
docker ps
查看所有容器
docker ps -a
进入容器
其中字符串为容器ID:
docker exec -it d27bd3008ad9 /bin/bash
1.停用全部运行中的容器:
docker stop $(docker ps -q)
2.删除全部容器:
docker rm $(docker ps -aq)
3.一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
删除所有镜像
docker rmi -f $(docker images -qa)
强制删除镜像:
docker image rm -f id
查看镜像:
docker images
停止指定容器\镜像:
docker stop id
删除指定容器
docker rm id
删除指定镜像:
docker rmi id
拉取镜像-MySQL
1、拉取镜像时的权限不足问题
docker pull mysql:5.7
- 1.1出现了权限不足
Got permission denied while trying to connect to the Docker daemon socket at unix:// / var/ run/ do
cker. sock: Post http:/ /%2Fvar%2Frun%2Fdouker. sock/vl. 40/ images/ create?fromImage=mysql&tag=5.7
dial unix /var/ run/ docker. sock: connect: permission denied
- 1.2此时需要在命令前面加上 sudo
sudo docker pull mysql:5.7
- 1.3也可以直接切换到root用户
su root
拉取镜像时,若果不指定镜像的版本,则默认拉取的是最新的版本
docker pull mysql
也可以拉取指定的版本的镜像
docker pull mysql:5.7
下面是权限不足时出现的问题
Got permission denied while trying to connect to the Docker daemon socket at unix:// / var/ run/ do
cker. sock: Post http:/ /%2Fvar%2Frun%2Fdouker. sock/vl. 40/ images/ create?fromImage=mysql&tag=5. 7
dial unix /var/ run/ docker. sock: connect: permission denied
权限不足时,需要加上sudo
sudo docker pull mysql:5.7
查看拉取的镜像
sudo docker images
创建实例
创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
docker run 【启动docker容器】
-p 3306:3306 【端口映射,将容器的3306端口映射到主机的3306端口上】 -p:端口映射
–name mysql\【给当前容器起的名称】 --name:为容器起名
-v /mydata/mysql/log:/var/mysql\【将日志文件挂载到主机】 -v:挂载
-v /mydata/mysql/data:/var/lib/mysql\【将配置文件挂载到主机】 -v:挂载
-v /mydata/mysql/conf:/etc/mysql\【将配置文件挂载到主机】 -v:挂载
-e MYSQL_ROOT_PASSWORD=root\【初始化root用户的密码,root为密码,可自行设置】 -e:初始化参数
-d mysql:5.7【-d:以后台的方式运行,要运行的镜像:mysql:5.7】 -d:(创建守护线程)后台运行
查看正在运行的docker镜像
docker ps
修改配置文件my.cnf中的字符编码
vi /mydata/mysql/conf/my.cnf
MySQL配置
在配置文件中敲【i】键进行编辑
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqlId]
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
修改完后,按Esc然后输入:wq回车,即可保存退出
:wq
配置好之后重启mysql
docker restart mysql
查看配置
进入bash目录
docker exec -it mysql /bin/bash
cd /etc/mysql
进入mysql目录中,此目录有my.cnf配置文件,抓取配置文件中的信息
cat my.cnf
此时可以看到刚刚配置好的信息,输入exit;退出查看命令
exit
到此为止mysql已配置成功,mysql可以正常使用
自动启动
配置指定的容器开启自动启动
sudo update redis restart=always
application.properties
# mysql数据库连接源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://IP地址:3306/数据库名?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
拉取Redis
拉取redis镜像,不选择版本号,默认拉取最新版本的redis
docker pull redis
创建实例并启动
在执行挂载的命令前,需要先创建对应的文件夹,之后输入挂载命令(不创建目录 后期使用redis时容易出问题)
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
参数说明
mkdir -p /mydata/redis/conf【首先需要创建好指定的文件夹目录】
docker run 【运行docker容器】
-p 6379:6379【端口映射,将docker中的6379端口映射到主机的端口上】 -p:端口映射
–name redis【为容器起名】
-v /mydata/redis/data:/data \【-v:目录挂载,将容器内部的data 文件夹挂载到Linux的/mydata/redis/data目录里】
-V /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \【将/etc/redis/redis.conf挂载到Linux中指定目录下】
-d --restart=always [配置开机启动]
redis自描述文件
redis自描述文件:
https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf
查看运行的redis镜像
docker ps
进入到conf目录下,查看redis.conf配置文件的信息 并没有配置信息
cd /mydata/redis/conf
cat redis.conf
连接redis客户端
docker exec -it redis redis-cli
测试redis
set a b
get a
exit
参数说明
set a b 在redis中添加数据,set 名称 值
get a 获取a的值
exit 退出redis客户端
此时并未做持久化,重启redis后数据就会丢失
开启持久化
在redis.conf中 配置开启持久化
进入conf目录
cd /mydata/redis/conf
vi redis.conf
进入redis.conf文件中,按【i】键,进行输入,输入一下命令,开启持久化【开启的时AOF模式的持久化】
# 持久化
appendonly yes
# 允许外网访问 yes-不运许外网访问 no-允许
protected-mode no
# 允许后台运行 yes-运行后台运行 no-不运许
# daemonize yes
# 监听访问ip,指定的ip才能访问
# bind 127.0.0.1
# redis访问密码
requirepass moluroot
之后按Esc键wq 保存并退出
输入命令可以抓取查看redis.conf文件中的信息
cat redis.conf
部署Redis集群
该集群有3个节点
#部署Redis集群,该集群有3个节点
docker create --name redis-node01 --restart=always --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379
docker create --name redis-node02 --restart=always --net host -v redis-node02:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380
docker create --name redis-node03 --restart=always --net host -v redis-node03:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381
#启动容器
docker start redis-node01 redis-node02 redis-node03
#进入redis-node01容器进行操作 组件集群操作
docker exec -it redis-node01 /bin/bash
#组件集群 为0表示没有父节点
redis-cli --cluster create IP地址:6379 IP地址:6380 IP地址:6381 --cluster-replicas 0
#创建多副本集群--了解
#redis-cli --cluster create 192.168.31.81:6379 192.168.31.81:6380 192.168.31.81:6381 192.168.31.81:16379 192.168.31.81:16380 192.168.31.81:16381 --cluster-replicas 1
#进入redis客户端命令行 查看redis节点
docker exec -it redis-node01 /bin/bash
redis-cli
#查询集群信息
127.0.0.1:6379> CLUSTER NODES
4f4fddc825e2387783fff9c972409b264e4df5d5 IP地址:6381@16381 master - 0 1563956537241 3 connected 10923-16383
0616e00533a16e931f8dfb2e8844c35ca5721dc8 IP地址:6380@16380 master - 0 1563956538243 2 connected 5461-10922
498b986e07731cead17ad1c62aa95dba6513c7b0 IP地址:6379@16379 myself,master - 0 1563956537000 1 connected 0-5460
#如果上述步骤出现错误,请重新部署
#重新创建redis容器,因为原有的容器中固定了ip地址的配置
docker stop redis-node01 redis-node02 redis-node03
docker rm redis-node01 redis-node02 redis-node03
#清理挂载数据
docker volume prune
如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
修改安装目录下的redis.conf文件
vim redis.conf
修改以下配置:
#bind 127.0.0.1 # 将这行代码注释,监听所有的ip地址,外网可以访问
protected-mode no # 把yes改成no,允许外网访问
daemonize yes # 把no改成yes,后台运行
Redis集群的连接配置
application.properties
# Redis相关配置
spring.redis.jedis.pool.max-wait = 5000ms
spring.redis.jedis.pool.max-Idle = 100
spring.redis.jedis.pool.min-Idle = 10
spring.redis.timeout = 50s
spring.redis.cluster.nodes=IP地址:6379,IP地址:6380,IP地址:6381
spring.redis.cluster.max-redirects=5
拉取Oracle
搜索查看镜像
docker search oracle
拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
查看镜像
docker images
启动并创建容器
docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
启动容器
docker start oracle11g
清除挂载
如果空间不足可以清理数据:
删除所有dangling数据卷(即无用的Volume):挂载docker volume rm $(docker volume ls -qf dangling=true)
进入镜像进行配置
docker exec -it oracle11g bash
切换用户
su root
密码:helowin
编辑profile文件
配置ORACLE环境变量
vi /etc/profile
在文件的最后添加以下信息,按【i】添加信息,添加完成后—按【Esc】并输入【:wq】回车保存退出
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
创建软连接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
切换用户 – 一定要写中间的内条 - 必须要,否则软连接无效
su - oracle
密码:root
登录sqlplus–修改sys、system用户密码–创建用户
sqlplus /nolog
修改密码 —一条一条的执行
连接
conn /as sysdba
修改密码:
alter user system identified by system;
alter user sys identified by sys;
alter user scott identified by scott;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
创建用户
create user test identified by test;
并给用户赋予权限
grant connect, resource, dba to test;
完成创建,退出–测试连接
exit
用户名和密码都是system 和 sys
设置总是启动
sudo update oracle restart=always
Navicat连接Oracle
连接名:Oracle11g
连接类型(默认):Basic
主机:主机ip
端口:拉取镜像时配置的映射端口(1521)
服务名:helowinXDB 默认服务名
用户名:system
密码:system
创建新用户首先要进入bash并切换用户
docker exec -it oracle11g bash
su - oracle
密码:root
sqlplus /nolog
连接并创建用户
-- 开始创建用户
conn /as sysdba
-- create 用户名 test identified by 密码;
create user orcldb identified by orcldb;
-- 并给用户赋予权限
grant connect, resource, dba to orcldb;
部署MongoDB
通过docker安装MongoDB
#拉取镜像
docker pull mongo:4.0.3
创建容器
#创建容器
docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:4.0.3
启动容器
#启动容器
docker start mongodb
进入容器
#进入容器
docker exec -it mongodb /bin/bash
使用MongoDB客户端进行操作
#使用MongoDB客户端进行操作
mongo
查询所有的数据库
#查询所有的数据库
show dbs
show dbs #查询所有的数据库
admin 0.000GB
config 0.000GB
local 0.000GB
MongoDB的连接配置
application.properties
# 应用的工程名
spring.application.name = molu-mongodb
# 数据库连接的参数
spring.data.mongodb.uri=mongodb://IP地址:27017/数据库名
Mongo坐标依赖
springboot整合MongoDB
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
部署RocketMQ
【注意ip地址一定是自己虚拟机上的IP地址】
拉取镜像
#部署RocketMQ
#拉取镜像
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2
创建nameserver容器
#创建nameserver容器
docker create -p 9876:9876 --name rmqserver --restart=always \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v rmqserver-logs:/opt/logs \
-v rmqserver-store:/opt/store \
foxiswho/rocketmq:server-4.3.2
创建broker.conf文件
#创建broker.conf文件
mkdir -p /mqdata/rmq/rmqbroker/conf/
vim /rmqdata/rmq/rmqbroker/conf/broker.conf
brokerIP1=IP地址
namesrvAddr=IP地址:9876
brokerName=broker_rmq
创建broker容器
#创建broker容器
docker create -p 10911:10911 -p 10909:10909 --name rmqbroker --restart=always \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmqdata/rmq/rmqbroker/conf/broker.conf:/etc/rocketmq/broker.conf \
-v rmqbroker-logs:/opt/logs \
-v rmqbroker-store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
启动容器
#启动容器
docker start rmqserver rmqbroker
# .Error response from daemon: driver failed programming external connectivity on endpoint rmqbroker (117f5908dbfe80f6a574d3516e972fbb45079bd68000b106c2e97eaf6f427d52): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10911 -j DNAT --to-destination 172.18.0.2:10911 ! -i docker0: iptables: No chain/target/match by that name
#
启动失败时 重启docker
#启动失败时 重启docker
systemctl restart docker
#停止删除容器
docker stop rmqbroker rmqserver
docker rm rmqbroker rmqserver
部署RocketMQ的管理工具
#部署RocketMQ的管理工具
docker pull styletang/rocketmq-console-ng:1.0.0
创建并启动容器
#创建并启动容器
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=IP地址:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t --restart=always styletang/rocketmq-console-ng:1.0.0
【修改虚拟机的IP地址】如果ip地址错误,修改ip
$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e44bd448-bfa7-4495-a479-f321bc5c10bc"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="IP地址" #根据实际情况进行修改
PREFIX="24"
GATEWAY="IP地址" #根据实际情况进行修改
DNS1="114.114.114.114"
IPV6_PRIVACY="no"
如果上述步骤出现错误,请重新部署
rockermq修改修改配置文件中的内容以及重新创建rocketmq-console-ng容器
RocketMQ的连接配置
application.properties
# RocketMQ相关配置
rocketmq.name-server=IP地址:9876
rocketmq.producer.group=组名
Zookeeper部署
拉取zk镜像
########### ZK的部署安装 #################
#拉取zk镜像
docker pull zookeeper:3.5
创建容器
#创建容器
docker create --name zk -p 2181:2181 zookeeper:3.5
启动容器
#启动容器
docker start zk
在服务实现模块中配置:application.properties
# Spring boot application
spring.application.name = my_tanhua_dubbo_service
dubbo.scan.basePackages = com.tanhua.dubbo.server
dubbo.application.name = dubbo-provider-tanhua
# dubbo服务
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880
# zookeeper注册中心的地址
dubbo.registry.address = zookeeper://IP地址:2181
dubbo.registry.client = zkclient
# mongodb 数据库的地址和库名 库名
spring.data.mongodb.uri=mongodb://IP地址:27017/库名
部署安装nginx
安装包在资料中:nginx-1.17.3.zip
安装在任意目录,通过命令:start nginx.exe 启动:
启动
start nginx.exe
重启加载
重启加载配置文件命令:nginx.exe -s reload
nginx.exe -s reload
修改配置
修改conf目录下的nginx.conf文件:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /user {
proxy_pass http://127.0.0.1:18080;
}
location / {
proxy_pass http://127.0.0.1:18081;
}
}
FastDFS环境部署
docker容器和宿主机使用同一个网络,这样就无需做端口映射
–network=host docker容器和宿主机使用同一个网络
拉取镜像
#拉取镜像
docker pull delron/fastdfs
创建tracker容器
#创建tracker容器
docker create --network=host --name tracker --restart=always -v fdfs-tracker:/var/fdfs delron/fastdfs tracker
#启动容器
docker start tracker
创建storage容器
#创建storage容器
docker create --network=host --name storage --restart=always -e TRACKER_SERVER=IP地址:22122 -v fdfs-storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
#启动容器
docker start storage
进入storage容器
#进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf。
docker exec -it storage /bin/bash
#默认的http端口为8888,可以修改也可以配置
# the port of the web server on this storage server
http.server_port=8888
配置nginx
#配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件
#默认配置如下:
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#默认的存储路径为/var/fdfs/data
FastDFS连接的配置
application.properties
# ===================================================================
# 分布式文件系统FDFS配置
# ===================================================================
fdfs.so-timeout = 1501
fdfs.connect-timeout = 601
#缩略图生成参数
fdfs.thumb-image.width= 150
fdfs.thumb-image.height= 150
#文件的大小限制
spring.servlet.multipart.max-file-size=30MB
spring.servlet.multipart.max-request-size=30MB
#TrackerList参数,支持多个
fdfs.tracker-list=IP地址:22122
#访问路径
fdfs.web-server-url=http://IP地址:8888/
导入依赖
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.7</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>