Docker

CentOS7下安装Docker

title: Docker date: 2020-08-08 17:56:34 tags: Docker

CentOS7下安装Docker

准备工作

  • 更新操作系统
yum update
  • 安装常用软件
yum install -y unzip zip wget vim net-tools lrzsz
# 打包镜像的机器根据开发语言的不同,按实际需要的进行安装

安装

  • Docker CE版本
#安装yum-utils软件包,以便使用yum-config-manager设置稳定库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装最新版本的Docker
yum install docker-ce docker-ce-cli containerd.io

# Docker开机自启
systemctl enable docker

# 启动Docker
systemctl start docker

# 验证Docker是否安装成功
docker run hello-world

文档: https://docs.docker.com/engine/install/centos/

  • Docker开机自启
systemctl enable docker

安装redis


# 安装redis
docker run -p 6379:6379 --restart=always -d redis:latest redis-server

# 安装redis 并限制100M内存
docker run  -it  -m 100M --memory-swap -1 -p 6379:6379 --restart=always -d redis:latest redis-server

文档: https://docs.docker.com/compose/install/

私有镜像库

  • 安装镜像库

    • 下载镜像
    docker pull registry
    
    • 运行registry容器
    #参数说明
    #-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
    #-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
    #-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
    #--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
    #--name registry:创建容器命名为registry,你可以随便命名;
    #registry:latest:这个是刚才pull下来的镜像;
    docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest   
    
  • 上传镜像

    配置镜像服务器

    [root@node ~]# vim /etc/docker/daemon.json 
    {
        "registry-mirrors": [ "https://registry.docker-cn.com"],
        "insecure-registries": [ "镜像服务器IP:5000"]
    }
    

    镜像打标签

    docker tag test:latest  镜像服务器IP:5000/test:v1
    

    镜像上传

    docker push 镜像服务器IP:5000/test:v1
    
  • 查看镜像

    curl http://IP:5000/v2/_catalog
    
  • 查看test镜像都有哪些tag

    http://镜像服务器IP:5000/v2/busybox/tags/list
    ···
    
    
    

常用组件

  • MinIO 文件存储(单实例运行)
docker run -itd -p 9000:9000 --restart=always --name minio1 -v /data/minio:/data -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data

# 纠删码方式

docker run -itd -p 9000:9000 --restart=always --name minio1 -v /home/minio/data00:/data00 -v /home/minio/data01:/data01 -v /home/minio/data02:/data02 -v /home/minio/data03:/data03 -v /home/minio/data04:/data04 -v /home/minio/data05:/data05 -v /home/minio/data06:/data06 -v /home/minio/data07:/data07 -v /home/minio/data08:/data08 -v /home/minio/data09:/data09 -e "MINIO_ACCESS_KEY=qwert12345" -e "MINIO_SECRET_KEY=qwert12345" minio/minio server /data00 /data01 /data02 /data03 /data04 /data05 /data06 /data07 /data08 /data09

文档:https://docs.min.io/docs/minio-docker-quickstart-guide

  • MySQL5.7
# 创建MySQL 且不区别大小写,时区为东八区 密码为root
# 注意mysql数据保存位置,root用户名密码 镜像版本号
docker run -id --name=ry_mysql -e TZ=Asia/Shanghai -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root -v /home/mysqldata:/var/lib/mysql mysql:5.7.38 --lower_case_table_names=1 

# 创建MySQL 限制内存
docker run  -it -m 256M --memory-swap -1  -id --name=ry_mysql -e TZ=Asia/Shanghai -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root -v /home/mysqldata:/var/lib/mysql mysql:5.7.38 --lower_case_table_names=1

  • ElasticSearch
docker run -e "ES_JAVA_OPTS=-Xms64m -Xmx251m" --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  --restart=always -d elasticsearch:7.2.0

docker中的容器时区更改

  • 进入需要更改时区的容器
    docker exec -it 容器ID bash
  • 将宿主机的时区链接到容器里面
    # 这里使用的是上海的时区
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
    #如果本地时区不正确,可以更改本地时区:
    echo "Asia/Shanghai" > /etc/timezone
  • 退出容器并重启容器
    exit  # 退出容器
    docker restart 容器ID #重启容器
  • 删除无用和没有tag的镜像
docker image prune -f
  • 阿里云效容器加速打包
# jre8的版本 带字体修复
registry.cn-beijing.aliyuncs.com/qtubiao/openjdk:8-jre-alpine-font

# jdk17的版本 带字体修复
registry.cn-beijing.aliyuncs.com/qtubiao/openjdk:17-jdk-alpine3.14-font

  • 一键部署maven私服
docker run -d -p 48081:8081  --privileged=true --name nexus -v /data1/zhongyj/data/nexus-data:/nexus-data --restart=always sonatype/nexus3 
  • 安装rockylinux

# 查看容器日志最后十行
docker compose logs -f -t --tail=10

申请免费的通配SSL证书

环境

  • 系统:CentOS 7.9
  • 域名:*.example.com

步骤

安装Certbot

  1. 安装Snap
    Snap
  2. 安装Certbot
    Certbot文档

申请证书

1
2
3
4
5
6
7
# 因为申请通配证书需要手动验证,所以需要使用dns-01验证方式
certbot certonly -d "*.xx.com" -d xx.com --manual --preferred-challenges dns-01
# 按照提示进行验证 在dns解析中添加txt记录
# 在提示信息中给到的类似https://toolbox.googleapps.com/apps/dig/#TXT/的站点验证txt记录后 再进行下一步

# 最后会生成证书 保存目录会在日志中打印出来
# 证书有效期为90天 需要手动续签 同时还有邮件的,非常方便

github_hosts

github_hosts

说明

github_hosts是一个用于配置github加速的hosts文件。

使用方法

将github_hosts文件中的内容复制到你的hosts文件中,并保存。

仓库地址

镜像链接

Spring Tool Suite

Spring Tool Suite 设置Tab键为4个空格

  • 在Spring Tool Suite -> window -> Preference -> General -> Editors,选择Insert spaces for tabs,若要展示空格可勾选Show whitespace characters
    preferences.jpg

  • 然后展开Java -> Code Style -> Formatter,点击New按钮,在New Profile窗口中,填写Profile name之后,点击OK
    formatter.jpg

  • 在弹出的窗口中,展开Indentation,设置Tab policy的值为 Spaces only

  • profile.jpg

springboot with docker

常用的springboot项目中的Dockerfile示例

Dockerfile:利用容器打包并缓存maven

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
26
27
28
29
30
31
32
33
34
# 拉取编译环境
FROM maven:3.8.3-openjdk-17 as builder
# 创建项目目录
RUN mkdir /project

# 使用项目配置的文件
COPY settings.xml /usr/share/maven/conf/settings.xml

# 拷贝源码到固定的目录,注意前面有个 '.'
COPY ./pom.xml /project/pom.xml

# 切换到源码目录
WORKDIR /project

# 安装依赖
RUN mvn dependency:go-offline

# 复制源代码
COPY ./src /project/src

# 使用maven进行编译
RUN mvn clean package -Dmaven.test.skip=true

# 拉取运行环境,这个镜像打包出的镜像比较小,如需要可换成oracle的jre
FROM openjdk:17

# 从编译好的镜像中将jar拷贝到运行时容器
COPY --from=builder /project/target/xxxx.jar /

# 容器启动时执行的命令,这里可加jvm参数
ENTRYPOINT ["java","-jar","/xxxx.jar"]

# 开放端口,根据自己的配置进行开放
EXPOSE 8080

配套deploy.sh脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
start=$(date +%s)
cd /data/java_project_dir #切换到java项目所在目录
echo "切换目录"
git pull
echo "更新代码 完成"
docker build . --tag tts
echo "打包镜像 完成"
docker stop tts
echo "停止服务 完成"
docker rm tts
echo "删除容器 完成"
docker run -itd --name=tts -p 28085:8080 tts
echo "启动服务 完成"
docker image prune -f
echo "删除无tag镜像"
end=$(date +%s)
take=$(( end - start ))
echo 操作完成 本次用时:${take}s

安装dnf命令

正常情况下openjdk:17的镜像中是不带有yum或者dnf命令,如果要用上这个命令那就需要安装一下

  • 启动与openjdk:17 对应相同版本的 oracleLinux (查询镜像内的cat /etc/os-release)

    1
    docker run -itd --name=oraclelinux85 oraclelinux:8.5
  • 进入容器

    1
    docker exec -it oraclelinux85 /bin/bash
  • 安装基础包

    1
    yum -y install yum-utils
  • 下载dnf所有程序包(包括依赖),程序会下载所有文件在当前目录下

    1
    repotrack dnf
  • 退出容器 oraclelinux85 ,并复制文件到宿主机

    1
    docker cp oraclelinux85:/root/* ./tmp
  • 复制文件从宿主机到目标容器

    1
    docker cp ./tmp  targetContainer:/root/
  • 进入目标容器安装程序

    1
    2
    3
    4
    docker exec -it targetContainer /bin/bah
    cd /root/
    rpm -Uvh --force --nodeps *.rpm
    rm -rf *.rpm

    最后,愉快的使用dnf命令吧

PaddleRec

从Docker中的Ubuntu16.04

1
2
3
4
5
6
7
8
# 拉取镜像
docker pull ubuntu:16.04

# 绑定8888端口并启动
docker run -p 8888:8888 -itd --name ubuntu ubuntu:16.04

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

在更新容器内的操作系统

1
2
3
4
5
# 更新源
apt update

# 更新操作系统
apt upgrade

安装依赖

1
apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl vim zip unzip wget

更新openssl版本至1.1.1c

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
26
27
28
29
30

# 切换到主目录
cd ~

# 下载源代码
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz

# 解压源代码
tar -zxf openssl-1.1.1c.tar.gz

# 进入源代码目录
cd openssl-1.1.1c

# 执行编译安装
./config
make
make install

# 链接库文件
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

# 备份openssl
mv /usr/bin/openssl /root/

# 链接目录
ln -s /usr/local/bin/openssl /usr/bin/openssl

# 查看当前openssl版本
openssl version

安装Git

1
apt-get install git -y

安装 pyenv 方便安装Python3.7.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
curl https://pyenv.run | bash

#添加 对应文件到 .bashrc


#安装 python3.7.4
pyenv install 3.7.4

#全局使用
pyenv global 3.7.4

# 更新pip
python -m pip install --upgrade pip

#安装飞桨1.8.4
python -m pip install paddlepaddle==1.8.4 -i https://mirror.baidu.com/pypi/simple

# 降低飞桨默认安装最新版本的protobuf
pip install protobuf==3.20.1

安装 Jupyter lab

1
2
3
pip install jupyterlab
pip install jupyterlab-language-pack-zh-CN
jupyter lab --allow-root

Rocky

Rocky下安装Python3.7.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 更新操作系统
dnf check-update -y
dnf update -y
dnf install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y

# 下载源代码
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
# 解压
tar -xf Python-3.7.4.tar.xz
# 目录切换
cd Python-3.7.4
# 进行编译
./configure --enable-optimizations

make -j 6
nproc
make altinstall

# 版本
python3.7 --version

# 更新pip
python3.7 -m pip install --upgrade pip

飞桨安装

1
python3 -m pip install paddlepaddle==1.8.4 -i https://mirror.baidu.com/pypi/simple

初始化Node.js项目

创建项目

1
mkdir projectname && npm init

安装依赖

1
2
3
4
5
6
7
8
9
# 使用d3
npm i d3

# 使用rollup打包
npm install rollup --global
rollup -c

#添加压缩
npm install rollup-plugin-terser