docker 安装以及 opengauss 安装
docker 安装
docker 依赖环境安装
1
2
3
4sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repodocker 引擎安装
1
2sudo yum install docker-ce docker-ce-cli containerd.io
yum list docker-ce --showduplicates | sort -r启动 docker
1
sudo systemctl start docker
docker 换源 阿里云
1
2
3
4
5
6
7
8sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2e1o9u0t.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
opengauss 安装
安装 opengauss 镜像
1
docker pull enmotech/opengauss
启动镜像
1
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Secretpassword@123 -p 8181:5432 enmotech/opengauss
查看是否启动
1
docker ps
开放安全组
在华为云安全组将
8181
端口开放,外部即可连接。连接,选择
postgre
数据库1
2
3
4
5
6
7
8
9
10
11
12
13docker exec -it opengauss sh
# 切换到 omm 用户
su - omm
# 登陆数据库
gsql
# 创建用户,然后就可以用连接了,密码好像有强度要求。
CREATE USER auggie CREATEROLE PASSWORD '3263265Rjc';
# 查看所有用户
SELECT * FROM pg_user;
Docker 常用命令
帮助信息
1 | docker 命令 --help |
镜像命令
1 | docker images # 查看镜像 |
容器命令
有了镜像才可以创建容器
新建容器并启动
1 | docker run [option] image |
1 | [root@auggie ~]# docker run -it centos |
列出运行的容器
1 | docker ps [option] |
退出容器
1 | exit 关闭退出 |
删除容器
1 | docker rm [-f] 容器ID |
启动和停止容器
1 | docker start id 启动 |
其他命令
后台启动 docker
通过 -d 后台启动
1 | [root@auggie ~]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 1;done" |
查看日志
1 | docker logs -ft --tail n ID |
查看 docker 内部的进程信息
1 | docker top ID |
查看容器元信息
1 | docker inspect ID |
进入当前正在进行的容器
1 | # 进入后台方式运行的容器 |
从容器内拷贝文件到主机
1 | docker cp ID:src dest |
可视化
portainer
是一个图形化界面管理工具
1 | docker run -d -p 8181:9000\ |
Docker 镜像
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境开发的软件。
如何获得镜像:
- 远程仓库下载
- 自己制作
镜像加载原理
UnionFS(联合文件系统)
docker 下载时分层
Docker 镜像加载原理
- bootfs(boot file system)
- rootfs(root file system)
为什么 docker 中的 centos 很小?
对于一个精简的 OS,rootfs 可以很小。对于不同的 linux 发行版本,bootfs 基本一致,rootfs 会有差别。
commit 镜像
用于生成新镜像,相当于快照。
1 | docker commit |
简单总结 docker 的一些命令:
- 镜像
- docker images
- docker search
- docker pull
- docker rmi
- 容器
- docker run
- docker ps
- docker inspect ID
- docker top ID
- docker logs -ft –tial n ID
- exit && ctrl + p + q
- docker stop / kill / start / restart
- 容器 -> 镜像
- docker commit -m=”” -a=”” ID img:[tag]
容器数据卷(数据持久化,双向绑定)
问题:如果容器删除,数据就会丢失!
需求:数据持久化
使用数据卷
- 使用命令挂载
1 | docker run -it -v 主机目录:容器内目录 |
1 | # docker inspect ID |
挂载 mysql
1 | docker run -v dest:src --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql |
具名和匿名挂载
通过 docker volume ls
可以查看挂载,使用 docker volume inspect Name
可以查看挂载位置
匿名挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@iZuf694tmueqwc1qv0nwwdZ test]# docker run -d --name nginx03 -v /etc/nginx nginx
00faee8254a84238b2f464e84b1501198276420cac82ffc2c62fbfd32a103b08
"Mounts": [
{
"Type": "volume",
"Name": "675fde039bc4823c18c279a40099e656cda5f351d18ae1410df561ee07bd591e",
"Source": "/var/lib/docker/volumes/675fde039bc4823c18c279a40099e656cda5f351d18ae1410df561ee07bd591e/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],具名挂载
含有名字的挂载
- DockerFile
Dockerfile 用来构建 docker 镜像的构建文件
编写 dockerfile
1
2
3
4
5
6
7FROM centos
# 匿名挂载
VOLUME ["volume01", "volume02"]
CMD echo "---end---"
CMD /bin/bash生成镜像
1
2docker build -f ./dockerfile1 -t auggie/centos .
创建的两个容器:
1 | "Mounts": [ |
Dockerfile
dockerfile 用于构建一个 docker 镜像
构建过程:
- 编写一个 dockerfile 文件
- docker build 构建成为一个镜像
- docker run 将镜像生成容器
dockerfile 的构建过程
基础知识:
- 每一个 keyword 都是大写字母
- 从上到下构建
- 每一个指令都会创建提交一个新的镜像层,并提交
dockerfile :用于构建 docker images
docker images 是通过 dockerfile 构建生成的镜像,最终发布和运行的产品
docker container 是通过 docker image 构建的容器
dockerfile 的指令
FROM
- 这个镜像的妈妈是谁
- 指定基础镜像
WORKDIR [dir]
- 工作的根目录
MAINTAINER
- 指定维护者的信息
RUN
- 构建镜像的时候,需要运行的命令
ADD
- 添加文件,例如部署 tomcat,则要添加 tomcat 的压缩包
COPY
- 类似 ADD,将文件拷贝到镜像中
WORKDIR
- 镜像的工作目录
VOLUME
- 挂在卷
EXPOSE
- 暴露端口
CMD
- 指定这个容器启动的时候,需要运行的命令;只有最后一条会生效
ENTRYPOINT
- 指定这个容器启动的时候,需要运行的命令;可以追加
ENV
- 设置环境变量,用于设置 mysql 的密码
发布镜像
- 登陆
docker login -u$user -p$pass
1 | docker login -u |
- 发布
dcoker push username/name:[tag]
- 镜像需要以 username/repo 的格式命名
发布 springboot 项目
向 springboot 项目打包 .jar
编写 Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25# 在 jdk11 上面构建
FROM openjdk:11
# 指定工作目录
WORKDIR /auggie
# 将 .jar 文件拷贝到容器中
COPY docker-0.0.1-SNAPSHOT.jar app.jar
# 指定环境变量
ENV JAVA_HOME /usr/local/java
# 暴露容器端口,但是需要在 run 的时候,使用 -p 绑定主机端口
EXPOSE 8080
# 在 build 容器的时候执行
# Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
RUN echo "hello world" \
$$ find .
# 执行命令,在 docker 容器 run 的时候 运行
CMD ["echo", "hello docker"]
# 执行命令,类似于 CMD,但是启动容器的时候,可以指定 --entrypoint 覆盖
ENTRYPOINT ["java", "-jar", "/app.jar"]将 jar 包和 Dockerfile 发送到服务器
docker build -t "name" .
构建镜像docker run name -p 8080:8080
生成容器
Docker 网络
- Post title:docker
- Post author:auggie
- Create time:2022-04-07 08:18:50
- Post link:https://ruanjiancheng.github.io/2022/04/07/my-new-post/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.