大数据技术AI
Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料
122篇原创内容
公众号
第一章 docker架构
-
Docker_Host
-
安装Docker的主机
-
Docker Daemon:
-
运行在Docker主机上的Docker后台进程
-
Client:
-
操作Docker主机的客户端(命令行、UI等)
-
Registry:
-
镜像仓库
-
Docker Hub
-
Images:
-
镜像,带环境打包好的程序,可以直接启动运行
-
Containers:
-
容器,由镜像启动起来正在运行中的程序
第二章 docker安装
参照如下文档:https://docs.docker.com/engine/install/centos/
2.1 移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.2 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
2.4 启动
systemctl enable docker --now
2.5 配置加速
这里额外添加了docker的生产环境核心配置cgroup
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82ghjr69.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
第三章 基础命令
3.1 找镜像
去docker hub,找到nginx镜像
#下载最新版
docker pull nginx
#镜像名:版本名(标签)
docker pull nginx:1.20.1
#下载最新
docker pull redis
docker pull redis:6.2.4
## 下载来的镜像都在本地
#查看所有镜像
docker images
redis = redis:latest
# 删除镜像
docker rmi 镜像名:版本号/镜像id
3.2 启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
【docker run 设置项 镜像名 】 镜像启动运行的命令(镜像里面默认有的,一般不会写)
# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm 容器id/名字
docker rm -f mynginx #强制删除正在运行中的
#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
#应用开机自启
docker update 容器id/名字 --restart=always
# -d:后台运行
# --restart=always: 开机自启
docker run --name=mynginx -d --restart=always -p 80:80 nginx
3.3 修改容器内容
3.3.1 进容器内部修改
# 进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
echo "hello world" >> /usr/share/nginx/html/index.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDdSutas-1656812363523)(https://mmbiz.qpic.cn/mmbiz_png/3xUEcImibkwLW5vaZsgVx8Rxyjx6pb9j7zPoP1nicLAGRwnRMz2AVg3HpPuKZfU5pEemDaT1weichtk55C3laTpicQ/640?wx_fmt=png)]
3.3.2 挂载数据到外部修改
[root@bigdata ~]# docker run \
> --name=mynginx \
> -d --restart=always \
> -p 80:80 \
> -v /bigdata/html:/usr/share/nginx/html:ro \
> -v /bigdata/conf/nginx.conf:/etc/nginx/nginx.conf \
> nginx
ro:只读
rw:读写
# 修改页面只需要去 主机的 /data/html
[root@bigdata ~]# cd /bigdata/html
[root@bigdata bigdata]# echo "hello world" > index.html
3.4 提交改变
将自己修改好的镜像提交
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "duo-nginx" -m "首页变化" 341d81f7504f duo-nginx:v1.0
# 将镜像保存成压缩包
docker save -o abc.tar guignginx:v1.0
# 别的机器加载这个镜像
docker load -i abc.tar
案例:
# 将自己修改好的镜像提交
[root@bigdata ~]# docker commit -a "duo" -m "duo-nginx" e3b20 duo-nginx:v1.0
sha256:2292d3f3896195933b6ba703376456b03f8dd68c3c84520efa318b155556d0e7
[root@bigdata ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
duo-nginx v1.0 2292d3f38961 5 seconds ago 141MB
redis latest 7614ae9453d1 6 months ago 113MB
nginx 1.20.2 50fe74b50e0d 6 months ago 141MB
# 运行自己提交的镜像
[root@bigdata ~]# docker run -d --name=duo-nginx --restart=always -p 80:80 duo-nginx:v1.0
647ddf50cce8c650bd59d9d1a0817790d2d9daec97854945da1bfaf841a24130
[root@bigdata ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
647ddf50cce8 duo-nginx:v1.0 "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp duo-nginx
# 将镜像保存成压缩包
[root@bigdata ~]# docker save -o duo-nginx.tar duo-nginx:v1.0
[root@bigdata ~]# ls
duo-nginx.tar
3.5 推送到远程仓库
# 把旧镜像的名字,改成仓库要求的新版名字
[root@bigdata ~]# docker tag duo-nginx:v1.0 hyunbar/duo-nginx:v1.0
[root@bigdata ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyunbar latest 2292d3f38961 24 minutes ago 141MB
hyunbar/duo-nginx v1.0 2292d3f38961 24 minutes ago 141MB
# 登录到docker hub
[root@bigdata ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hyunbar
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# 推送
[root@bigdata ~]# docker push hyunbar/duo-nginx:v1.0
The push refers to repository [docker.io/hyunbar/duo-nginx]
903b87f966d8: Pushed
c75c795b7d44: Mounted from library/nginx
4e498ce5ae6a: Mounted from library/nginx
35437a3771fc: Mounted from library/nginx
108a6d6c3e60: Mounted from library/nginx
9ccbab2746b8: Mounted from library/nginx
2edcec3590a4: Mounted from library/nginx
v1.0: digest: sha256:68899b426c79c94256e801f14868a2ad070d7c9760f2381d8d5f55679ae88d86 size: 1778
# 推送完成镜像后退出登录
[root@bigdata ~]# docker logout
Removing login credentials for https://index.docker.io/v1/
创建仓库
推送成功
3.6 其他
(1)查看docker容器运行日志
[root@bigdata ~]# docker logs mynginx(容器id)
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
。。。
34.78.120.100 - - [22/Jun/2022:11:55:36 +0000] "GET / HTTP/1.1" 200 12 "-" "python-requests/2.28.0" "-"
(2)把容器指定位置的东西复制出来
[root@bigdata ~]# docker cp mynginx:/etc/nginx/nginx.conf /bigdata/conf/nginx.conf
[root@bigdata bigdata]# ls conf/
nginx.conf
(3)把外面的内容复制到容器里面
[root@bigdata ~]# docker cp /bigdata/conf/nginx.conf mynginx:/nginx.conf
[root@bigdata bigdata]# docker exec -it mynginx /bin/bash
root@432635f03ed9:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
root@432635f03ed9:/# ls
bin dev docker-entrypoint.sh home lib64 mnt opt root sbin sys usr
boot docker-entrypoint.d etc lib media nginx.conf proc run srv tmp var
root@432635f03ed9:/#
第四章 实战应用
4.1 应用
从官网创建并下载:https://start.spring.io
spring应用代码
package com.example.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CounterController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/pagecount")
public String count(){
// 每次点击页面,自动+1
Long count = redisTemplate.opsForValue().increment("count");
return count+ " 人访问了";
}
}
配置文件
spring.redis.host=bigdata
spring.redis.password=123456
访问地址:http://localhost:8080/pagecount 访问三次
4.2 docker flie 打包
FROM openjdk:8-jdk-slim
LABEL maintainer=duo
COPY target/*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像
[root@bigdata demo]# docker build -t java-demo:v1.0 .
Sending build context to Docker daemon 27.7MB
Step 1/4 : FROM openjdk:8-jdk-slim
8-jdk-slim: Pulling from library/openjdk
a2abf6c4d29d: Already exists
2bbde5250315: Pull complete
115191490c27: Pull complete
61b680ac8083: Pull complete
Digest: sha256:25efb6e0609b95af243b4e3ce2c27dbc1022ef2a4db2164b7afa066c0db18137
Status: Downloaded newer image for openjdk:8-jdk-slim
---> 9afd0fe33df7
Step 2/4 : LABEL maintainer=duo
---> Running in 11c914b66cad
Removing intermediate container 11c914b66cad
---> 4accae2ef6da
Step 3/4 : COPY target/*.jar /app.jar
---> 2a8148ba6a03
Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in dd89e103f249
Removing intermediate container dd89e103f249
---> d440c1fad876
Successfully built d440c1fad876
Successfully tagged java-demo:v1.0
查看镜像
[root@bigdata demo]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
java-demo v1.0 d440c1fad876 About a minute ago 323MB
duo-nginx v1.0 2292d3f38961 2 days ago 141MB
nginx latest 605c77e624dd 5 months ago 141MB
openjdk 8-jdk-slim 9afd0fe33df7 6 months ago 296MB
4.3 启动容器
启动容器
[root@bigdata demo]# docker run -d -p 8080:8080 --name java-app java-demo:v1.0
1c57b808c34b03525f27c8dba45d38de48e2d50bb2ca099e8bae5bd9f7b6a4ab
[root@bigdata demo]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c57b808c34b java-demo:v1.0 "java -jar /app.jar" 5 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp java-app
查看log:
[root@bigdata demo]# docker logs -f 2d3c0fdcb79f
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.0)
....
2022-06-23 12:48:37.695 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
查看结果:
4.4 部署redis
[root@bigdata redis]# docker run \
> -d \
> --name=duo-redis \
> -v /bigdata/data/redis/conf/redis.conf:/etc/redis/redis.conf \
> -v /bigdata/data/redis/data:/data \
> --restart=always \
> -p 6379:6379 \
> redis:latest \
> redis-server /etc/redis/redis.conf
>
[root@bigdata redis]# cat conf/redis.conf
appendonly yes
requirepass 123456