作用:其实就相当于再生龙🐉,您细品

一、ocker就两步操作:
1、拉取(pull)镜像到本地
2、给镜像创建一个容器并run(跑)起来,其余的想要对哪个容器进行操作,就进入该容器中,执行的相关命令跟Ubuntu是差不多的
具体命令格式请参考​docker安装各种组件[^1]
二、docker默认是需要sudo权限的,看到什么权限报错,就在前面加上sudo
三、迭代自定义镜像时,每次都一定要记得commit当前镜像的环境才push到远程,不然不更新(呜呜呜~~~)
按我理解 简言之(​我愿称之为顶级理解****​ )

docker 镜像: ----java中 class
docker 容器: ----java中 class new 出来的实例对象

docker compose
其实就是用一个docker-compose.yml文件来配置好 docker 镜像和容器的端口号、参数、网络,跟 SpringBoot的配置文件作用一样

[^1]: # docker安装各种组件

==镜像的概念:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。==

# 一	docker基本命令

## 镜像操作

### ① **查看所有镜像**

docker images
### ② 搜索镜像(****以jdk为例****)
docker search jdk
![](/assets/docker%E5%AE%89%E8%A3%85%E5%90%84%E7%A7%8D%E7%BB%84%E4%BB%B6_image_0-20251130181901-4lh9qqa.png) ### ③ 下载镜像
docker pull java
### ④ 启动镜像(以jdk8为例)
docker run -it --name jdk1.8 -d java:latest /bin/bash
### ⑤ 删除镜像
docker rmi [镜像id]
docker rmi [镜像名称]:[tag]
### ⑥ **数据卷直接挂载操作** 语法:在docker run后面加上 -v参数 - -v [宿主机目录]:[容器内目录] - -v [宿主机文件]:[容器内文件] ## **容器操作** ### **① 进入某个容器进行操作**
// 以进入mysql容器为例: 
docker exec -it {{容器名称/容器ID,用docker ps查看}} bash
### **② 查看所有运行着的容器**
docker ps -a
### **③ 启动容器**
docker start [容器id]
### **④ 停止容器**
docker stop [容器id]
### **⑤ 删除容器**
docker rm [容器id]
### **⑥ 查看运行的容器日志**
docker logs [OPTIONS] 容器ID或容器名称
# 例:查看全部日志
docker logs -f 容器名称
 
[OPTIONS]
 
-f : 跟踪日志输出
 
-t : 显示时间戳
 
--tail :仅列出最新N条容器日志
 
--since:显示某个日期至今的所有日志
> 查看最近10条日志, 并持续打印 >
docker logs -f --tail 10 efb78392fcc6
![0](/assets/0-20251202182336-s73t00f.png) 查看某个日期至今的所有日志, 并持续打印
docker logs -f --since "2022-05-16" efb78392fcc6
# **二 安装mysql**
docker login --username=akeys registry.cn-chengdu.aliyuncs.com
docker pull registry.cn-chengdu.aliyuncs.com/keys-docker-hub/mysql:8.1.0
# Ubuntu
sudo mkdir -p /tmp/mysql/data && sudo mkdir -p /tmp/mysql/conf && sudo gedit /tmp/mysql/conf/my.cnf
# Centos
sudo mkdir -p /tmp/mysql/data && sudo mkdir -p /tmp/mysql/conf && sudo vim /tmp/mysql/conf/my.cnf
**mysql配置文件: vim** **/tmp/mysql/conf/my.cnf**
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_ connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
主库配置
# mysql服务ID,保证整个集群环境中唯一,取值范围:1---2^32-1,默认为1
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0
# 忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
# 指定同步的数据库
#binlog-do-db=db01
从库配置
# mysql服务ID,保证整个集群环境中唯一,取值范围:1---2^32-1,默认为1
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1
# 忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
# 指定同步的数据库
#binlog-do-db=db01
启动mysql
# 第一个3306是物理机端口,第二个3306是docker容器端口
docker run --name mysql \
  -v /tmp/mysql/conf/my.cnf:/etc/mysql/my.cnf \
  -v /tmp/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root \
  -p 3306:3306 \
  -d registry.cn-chengdu.aliyuncs.com/keys-docker-hub/mysql:8.1.0
然后修改权限
# 进入mysql容器:
docker exec -it mysql /bin/bash
# 登录mysql:
mysql -uroot -proot
# 修改密码:记得flush privileges一下
ALTER USER 'root'@'%' IDENTIFIED BY 'G#t9WhZr2@qL7BmPnXeD';
flush privileges;
# 修改了之后,如果exit退出去再重进还是没修改的话,不用理他,其实已经修改了的!用Navicat来连就知道了,意思就是拿Navicat来测
主库配置
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
# 查看binlog文件位置的命令
show master status;
从库配置
change replication source to SOURCE_HOST='主库IP',SOURCE_USER='主库设置的用户名',SOURCE_PASSWORD='主库设置的密码',SOURCE_LOG_FILE='主库log文件位置',SOURCE_LOG_POS=同步主库的开始位置;
# 例子:
change replication source to SOURCE_HOST='192.168.126.132',SOURCE_USER='itcast',SOURCE_PASSWORD='Root@123456',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=664;

# 开启同步操作
start replica;
# 查看主从同步状态
show replica status\G;
下图所示红框都是Yes说明主从复制开启成功! ![0](/assets/0-20251202182651-39brhko.png) > 测试是否已经部署成功 >
create database db01;
use db01;
create table tb_user(
id int(11)primary key not null auto_increment,
name varchar(50)not null,
sex varchar(1)
)engine=innodb default charset=utf8mb4;
insert into tb_user(id,name,sex)values(null,'Tom','1'),(null,'Keys','1'),(null,'HaHa','1');
主库中执行上述语句,看看从库有没有作相应改变,如果有,则完结撒花!!! 如果主库中已经存在数据了,可以先把主库中的数据导出到一个sql文件中,然后在从库中执行这个sql文件,再开启同步即可 # **三 安装Oracle**
# 安装oracle
https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g

docker pull oracleinanutshell/oracle-xe-11g

# 运行镜像  -p: 是容器内部端口绑定到指定的主机端口
docker run --name oracle -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true oracleinanutshell/oracle-xe-11g

# 进入容器
docker exec -it oracle bash

# 连接 oracle
su oracle
cd $ORACLE_HOME
bin/sqlplus / as sysdba
# 创建账号
create user qingxi identified by 123456;
grant connect,resource to qingxi;

# 修改密码
alter user 用户名 identified by 新密码;

# 删除用户
drop user 用户名;
# **四 安装Postgresql**
# 拉取镜像
docker pull postgres
# 启动镜像
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=pass123 postgres
# 进入容器
docker exec -it 容器id bash
# 连接pg
psql -U postgres -h 127.0.0.1 -p 5432
# **五 安装redis**
docker pull redis
**启动**
// 创建配置文件
sudo mkdir -p /mydata/redis/data && sudo mkdir -p /mydata/redis/conf && sudo gedit /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis \
--restart=always \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
**redis-cli控制台:**
docker exec -it redis redis-cli
**redis开启持久化,修改配置文件redis.conf,启动aof持久化,输入:**
appendonly yes
**docker启动之后,mysql、redis也自动启动:**
docker update mysql --restart=always
docker update redis --restart=always
# 六 安装portainer
-it表示使用交互方式运行容器,能进入容器内部进行内容的查看
-p 9000:9000把主机的9000端口映射到docker的9000端口上
--name给容器命名
--restart=always是重启策略,表示随着docker的重启而重启
-v表示把数据挂载到本机
--privileged=true表示授权
 
docker run -d -p 9000:9000  --name portainer \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock \
--privileged=true portainer/portainer
# **七 Linux图形话监控netdata**
docker run -d --name=netdata \
  -p 19999:19999 \
  -v netdataconfig:/etc/netdata \
  -v netdatalib:/var/lib/netdata \
  -v netdatacache:/var/cache/netdata \
  -v /etc/passwd:/host/etc/passwd:ro \
  -v /etc/group:/host/etc/group:ro \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  --restart unless-stopped \
  --cap-add SYS_PTRACE \
  --security-opt apparmor=unconfined \
  netdata/netdata
# 八 安装Gitlab
docker run -d  -p 443:443 -p 8001:8001 -p 222:22 --name gitlab \
--restart always \
-v /home/gitlab/config:/etc/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
-v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.7.6-ce.0
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
   
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://121.4.123.248'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '121.4.123.248'
# 此端口是run时22端口映射的222端口
gitlab_rails['gitlab_shell_ssh_port'] = 222 
nginx['listen_port'] = 8001
http://121.4.123.248:8001/
root/ChatP@ss7633
# 九 安装Grafana
docker pull grafana/grafana
docker run -d -p 3000:3000 --restart always --name=grafana \
-v /root/grafana/data:/var/lib/grafana grafana/grafana
# 十 安装 Prometheus
docker pull bitnami/prometheus
docker run \
-p 9090:9090 \
-v /root/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus bitnami/prometheus
‍