Docker

Docker学习

在这里插入图片描述

一、概念 😐

Dcoker:

Docker是基于Go语言实现一种轻量级容器虚拟化技术(容器技术)。

镜像(image):

Docker 镜像(Image)是个只读的文件,它支持Docker与宿主机之间的导入,导出,上传,下载。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象

容器(container):

Docker 容器(Container)相当于独立运行的进程,容器是用镜像创建的运行实例,且各个容器间相互隔离。

二、安装

# 安装docker(三种任选其一)
yum -y install docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

curl -sSL https://get.daocloud.io/docker | sh

# 查看docker版本
docker version

# 添加阿里镜像源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
} 
EOF

# 刷新配置文件
systemctl daemon-reload
# 启动docker服务
systemctl enable docker && systemctl restart docker

三、命令 😐

① 镜像

# 镜像导入导出命令,点击[查看详情](https://blog.csdn.net/welcome66/article/details/105640242)

# 下载镜像
dokcer pull + image:tag
  
# 列出本地主机上的镜像 
docker images   

# 搜索对应DockerHub仓库中的镜像
docker search 
 
# 镜像打标签
docker tag old_image:tag new_image:tag

# 删除镜像
docker rmi -f + 镜像id # 删除单个
docker rmi -f + 镜像名:tag 镜像名:tag # 删除多个
docker rmi -f $(docker images -qa) # 删除全部

② 容器

# 运行容器命令
docker run [OPTIONS] IMAGE [COMMAND][ARG...]

# 常用参数说明
--name="Name"     # 给容器指定一个名字
--restart=always  # 当 docker 重启时,容器自动启动
--privileged=true # 外部访问可以获取容器内root最高权限
-v 宿主机绝对路径目录:容器内目录 镜像名
-w 容器内的工作目录
-e #设置环境变量
-P # 随机端口映射
-p hostPort:containerPort  # 指定端口映射
-d # 后台方式运行容器,并返回容器的id!
-i # 以交互模式运行容器,通过和 -t 一起使用
-t # 给容器重新分配一个终端,通常和 -i 一起使用

# 查看正在运行的容器
doker ps 

# 查看正在运行的容器+历史运行的容器
docker ps -a 

# 进入正在运行的容器
docker exec -it + 容器id/容器名 /bin/bash

# 退出当前容器
exit # 容器不停止退出
eitxexit # 容器停止退出

# 容器启动停止重启
docker start + 容器id / 容器名
docker restart + 容器id / 容器名
docker stop + 容器id / 容器名
docker kill + 容器id / 容器名

# 删除容器 
docker rm -f + 容器id  # S删除指定容器
docker rm -f $(docker ps -a -q )# 删除所有容器

③ 其他

# 查看日志
docker logs + 容器名
-t  # 显示时间戳
-f  # 打印最新的日志
--tail # 数字 显示多少条!

# 查看容器的进程信息
docker top + 容器id

# 查看镜像/容器的元数据
docker inspect +镜像/容器

# 从容器内拷贝文件到宿主
docker cp 容器id:容器内路径 宿主机路径

# 通过Dockerfile 创建容器
cd /jar和Dockerfile包所在目录/
docker  build -t + 新的容器名 .

四、构建容器

1. 安装Mysql

# 创建宿主机挂载目录
mkdir -p /usr/local/docker/mysql8.0.29/data
mkdir -p /usr/local/docker/mysql8.0.29/log
vim /usr/local/docker/mysql8.0.29/conf/my.cnf

# 下载 Mysql镜像
docker pull mysql:8.0.29

# 构建Mysql容器
docker run \
--name mysql \
--restart=always \
-p 3306:3306 \
-v /usr/local/docker/mysql8.0.29/log:/var/log/ \
-v /usr/local/docker/mysql8.0.29/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.29

# 查看容器是否运行
docker ps

# 打印redis容器日志
docker logs mysql

# 进入mysql容器内部
docker exec -it mysql /bin/bash

# 登录mysql
mysql -uroot -proot

# mysql授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

# 刷新
FLUSH PRIVILEGES;

注意事项: mysql8.0.29可能出现容器内可以连接mysql数据库,用navicat连不上的情况,需要改数据库密码

# 查看用户信息
select host,user,plugin,authentication_string from mysql.user;

# 修改数据库密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ycw123129';

2.安装oracle

#下载oracle数据库镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#下载完成后,查看镜像
docker images
#创建容器
docker run -d -p 1521:1521 --name oracle registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#进入容器内部
docker exec -it oracle /bin/bash
#切换到root用户下
su root
输入密码:helowin 
#配置环境变量
打开:vi /etc/profile ,在文件最后写上下面内容:

        export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2

        export ORACLE_SID=helowin

        export PATH=$ORACLE_HOME/bin:$PATH
#刷新加载环境变量
source /etc/profile
#创建软连接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
#切换到oracle用户下
su - oracle
这里还要说一下,一定要写中间的内条 - 必须要,否则软连接无效
#进行软连接
sqlplus /nolog
#登录sqlplus并修改sys、system用户密码
sqlplus /nolog   --登录
conn /as sysdba  --
alter user system identified by system;--修改system用户账号密码;
alter user sys identified by system;--修改sys用户账号密码;
create user test identified by test; -- 创建内部管理员账号密码;
grant connect,resource,dba to test; --将dba权限授权给内部管理员账号和密码;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; --修改密码规则策略为密码永不过期;(会出现坑,后面讲解)
alter system set processes=1000 scope=spfile; --修改数据库最大连接数据;

3. 安装Redis

# 创建宿主机挂载目录
mkdir -p /usr/local/docker/redis/conf
mkdir -p /usr/local/docker/redis/data

# 下载redis镜像
docker pull redis:7.0

# 查看已下载镜像
docker images

# 下载配置文件
wget http://download.redis.io/redis-stable/redis.conf

# 修改配置
1. bind 127.0.0.1 # 注释掉这部分,这是限制redis只能本地访问
2. protected-mode no 	# 默认yes,开启保护模式,限制为本地访问
3. daemonize no	# 默认no,如果改为yes意为以守护进程方式启动,可后台运行,除非 kill进程,改为yes会使配置文件方式启动redis失败
4. repl-diskless-sync-max-replicas 1 # 默认为0,主从集群副本数量
5. databases 16	# 数据库个数(可选),我修改了这个只是查看是否生效。
6. dir  ./ # 输入本地redis数据库存放文件夹(可选)
7. requirepass ycw123129 	# 设置redis数据库密码

# 创建redis容器
docker run -p 6379:6379 \
--name redis \
--restart=always \
--privileged=true \
-v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/data:/data \
-d redis:7.0 \
redis-server /etc/redis/redis.conf \
--appendonly yes

ps:
appendonly yes	 # 开启redis持久化
redis-server /usr/local/etc/redis/redis.conf # 启动redis服务

# 查看容器是否运行
docker ps

# 打印redis容器日志
docker logs redis

# 进入redis容器内部
docker exec -it redis /bin/bash

# 使用密码验证登陆
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a 123129

4. 安装mongo

# 拉取镜像
docker pull mongo
#  挂载目录   
mkdir -p /usr/local/docker/mongo/data
# 运行容器
docker run \
--name mongodb \
--restart always \
--privileged=true \
-p 27017:27017 \
-v /usr/local/docker/mongo/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123 \
-d mongo mongod --auth

# 打印mongo容器日志
docker logs mongo

-d: 后台运行容器;
--name: 指定容器名;
-p: 指定服务运行的端口;
-v: 映射目录或文件;
--privileged 拥有真正的root权限
--restart=always Docker服务重启容器也启动
-e MONGO_INITDB_ROOT_USERNAME=admin 指定用户名
-e MONGO_INITDB_ROOT_PASSWORD=admin123 指定密码
mongod --auth :容器默认启动命令是mongod,我们认证需要修改启动命为mongod --auth开启认证

5. 安装rabbitmq

# 拉取镜像(带management有web页面)
docker pull rabbitmq:3.9-management
#  挂载目录   
mkdir -p /usr/local/docker/rabbitmq/data
# 运行容器
docker run \
--name rabbitmq \
--restart always \
--privileged=true \
--hostname myRabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-v /usr/local/docker/rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.9-management

# 打印rabbitmq容器日志
docker logs rabbitmq

# 可以使用浏览器打开web管理端:http://Server-IP:15672

6. 安装elasticsearch

# 创建docker网络
docker network create -d bridge elk
# 从dockerHub中拉取镜像
docker pull elasticsearch:7.16.1
# 启动容器
docker run \
--name elasticsearch \
--restart=always \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-d elasticsearch:7.16.1

mkdir -p /usr/local/docker/elasticsearch/
# copy容器中的文件,到宿主机上
docker cp elasticsearch:/usr/share/elasticsearch/config/ /usr/local/docker/elasticsearch/config/
docker cp elasticsearch:/usr/share/elasticsearch/data/ /usr/local/docker/elasticsearch/data/
docker cp elasticsearch:/usr/share/elasticsearch/logs/ /usr/local/docker/elasticsearch/logs/
docker cp elasticsearch:/usr/share/elasticsearch/plugins/ /usr/local/docker/elasticsearch/plugins/

# 删除容器
docker rm -f 容器id

# 进入从容器里copy出的配置文件夹
cd /usr/local/docker/elasticsearch/config

# 修改elasticsearch.yml配置文件
vim elasticsearch.yml
------------------------------------------
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
------------------------------------------

# 用xshell把ik分词器解压后的文件复制到宿主机/usr/local/docker/elasticsearch/plugins/ik目录下
注意:应该下载 .zip 的文件,别下载 .gz 的,否则容器启动失败。安装地址https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.16.1

# 启动容器
docker run \
--name elasticsearch \
--restart=always \
--net elk \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms1024m -Xmx2048m" \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-v /usr/local/docker/elasticsearch/config/:/usr/share/elasticsearch/config/ \
-v /usr/local/docker/elasticsearch/data/:/usr/share/elasticsearch/data/ \
-v /usr/local/docker/elasticsearch/logs/:/usr/share/elasticsearch/logs/ \
-v /usr/local/docker/elasticsearch/plugins/:/usr/share/elasticsearch/plugins/ \
-d elasticsearch:7.16.1

# 进入容器
docker exec -it elasticsearch /bin/bash

# 输入命令,按y确认后即可设置密码
elasticsearch-setup-passwords interactive

# 重启elasticsearch,密码生效
docker restart elasticsearch

7. 安装kibana

# 宿主机上新建文件夹
mkdir -p /usr/local/docker/kibana/

# 进入该文件夹,新建kibana.yml配置文件
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://es_ip:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
i18n.locale: “zh-CN”

# 从dockerHub中拉取镜像
docker pull kibana:7.16.1

# 启动容器
docker run \
--name kibana \
--restart=always \
--net elk \
-p 5601:5601 \
-v /usr/local/docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.16.1

 # 查看kibana容器日志
 docker logs kibana

8.安装logstash

# 宿主机上新建文件夹
mkdir -p /usr/local/docker/logstash
# 进入该文件夹,新建logstash.yml配置文件
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme

mkdir -p /usr/local/docker/logstash/pipeline
# 进入该文件夹,新建logstash.conf配置文件
input {
        tcp {
                port => 5000
        }
}
## Add your filters / logstash plugins configuration here
output {
        elasticsearch {
                hosts => "elasticsearch:9200"
                user => "elastic"
                password => "changeme"
        }
}  

# 拉取镜像
docker pull logstash:7.16.1

# 运行容器
docker run \
--name logstash \
--restart=always \
--net elk \
-p 5000:5000 \
-p 9600:9600 \
-v /usr/local/docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /usr/local/docker/logstash/pipeline:/usr/share/logstash/pipeline \
-d logstash:7.16.1

 # 查看kibana容器日志
 docker logs logstash

9. 安装nacos

# 拉取镜像
docker pull nacos/nacos-server:v2.0.4
# 先启动容器导出配置文件
docker cp nacos:/home/nacos/conf/application.properties /usr/local/docker/nacos/conf/
# 修改配置文件配置mysql数据库信息
vim /usr/local/docker/nacos/conf/application.properties
# 启动容器
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
-Dnacos.standalone=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /usr/local/docker/nacos/logs:/home/nacos/logs \
-v /usr/local/docker/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:v2.0.4


# 此处有坑
1.报错:Client not connected,current status:SHUTDOWN
  分析:Nacos的客户端和服务端版本不兼容(如:1.4.2和2.0.3),差异在于新版本添加了Grpc调用,所以启动需要开放端口-p 9848:9848 -p 9849:9849,了解详情请看官方文档
  解决:查询Spring Cloud,Alibaba Cloud和Nacos Clint的版本对应关系,统一客户端和服务端版本。
2.报错:failed to req API:/nacos/v1/ns/instance after all servers([10.10.47.74:8848]) tried: java.net.SocketTimeoutException: connect timed out
  分析:默认配置了nacos集群。分别启动单个nacos时,会监测 cluster.conf文件中的信息,当其中配置了其他nacos时,若其他未启动,则会出现上述报错!
  解决:容器启动添加-Dnacos.standalone=true参数,或者建立nacos集群

10. 安装jenkins

# 下载jenkins镜像
docker search jenkins    // 查找jenkins镜像
docker pull jenkins/jenkins  // pull jenkins最新镜像
# 安装jdk
mkdir -p /usr/local/docker/jdk
1.下载jdk -> jdk-8u241-linux-x64.tar.gz 移动到 /usr/local/docker/jdk
2.解压安装包 -> tar -zxvf jdk-8u241-linux-x64.tar.gz
# 安装maven
mkdir -p /usr/local/docker/maven
mkdir -p /usr/local/docker/maven/repository
1.下载maven -> apache-maven-3.8.6-bin.tar.gz 移动到 /usr/local/docker/maven
2.解压安装包 -> tar -zxvf apache-maven-3.8.6-bin.tar.gz
3.修改settings.xml配置文件 ->
<localRepository>/var/jenkins_home/maven/repository</localRepository>
<mirror>
   <id>alimaven</id>
   <mirrorOf>central</mirrorOf>
   <name>阿里云公共仓库</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
# 创建jenkins挂载目录
mkdir -p /usr/local/docker/jenkins/var/jenkins_home
mkdir -p /usr/local/docker/jenkins/var/bin/docker
mkdir -p /usr/local/docker/jenkins/var/run/docker.sock
# 启动 Jenkins 容器
docker run -u root -d -e TZ="Asia/Shanghai" --name jenkins -p 8888:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /usr/local/docker/jenkins/var/run/docker.sock:/var/run/docker.sock  -v /usr/local/docker/jenkins/var/bin/docker:/usr/bin/docker -v /usr/local/docker/jdk:/var/jenkins_home/jdk -v /usr/local/docker/maven:/var/jenkins_home/maven jenkins/jenkins:latest
# 登陆jenkins http://ip:8888
cat /var/jenkins_home/secrets/initialAdminPassword 查看初始密码
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值