基於 Docker 的幾種常用 CentOS7 鏡像




本文主要介紹了使用 Docker 來製作CentOS 環境的鏡像,並上傳到阿里雲的 Docker 鏡像倉庫,其他有需要的可以通過連接拉取下載。我們在做開發時常常需要一些環境進行測試或者部署,在瞭解某個開源項目時也需要一個符合要求的環境下部署上手使用,但有時測試環境較雜亂,比如安裝部署 Apache Druid時使用默認端口啓動時可能會因爲某些端口占用而啓動失敗,可以通過修改默認端口,但是對於剛上手使用的用戶手動改動幾個端口對於本來還不熟悉項目的人來說可能會令人困惑,雖然也可以通過虛擬機來創建一個新的環境,但這樣比較麻煩, Docker 是個比較好的選擇,僅需幾個命令就可以啓動運行一個容器,配上國內鏡像源拉取下載速度是比較快的,不用時直接使用 docker 命令刪除,對於自己的某個需求還可以製作符合自己使用需求的鏡像,這樣就實現了快速拉取、快速啓動、快速移除和快速發佈。

  • 中文環境基礎版 Centos7 鏡像。在 CentOS 7 的鏡像基礎上,又添加了 vim、lsof、wget、tree、python-devel、c 編譯環境、ssh服務。系統 root 密碼爲 2020

    sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1
    sudo docker pull registry-internal.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1
    
  • 開發環境版 Centos7 鏡像。在 中文環境基礎版鏡像基礎上,又添加了 JDK8、Git、Maven、Nginx、Node.js服務。系統 root 密碼爲 2020

    sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003-dev_v1
    sudo docker pull registry-internal.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003-dev_v1
    
  • 中文環境基礎版鏡像。在 開發環境版 Centos7 鏡像基礎上添加了 MySQL 5.7 服務。系統 root 密碼爲 2020mysql 的 root 用戶密碼爲 123456

    sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:dev-mysql_v1
    sudo docker pull registry-internal.cn-shanghai.aliyuncs.com/yore/bigdata:dev-mysql_v1
    

我的鏡像



1 安裝 Docker

# 1 查看系統中是否已經安裝了 Docker
systemctl status docker
rpm -qa | grep -E "docker"
## 1.1 如果重新安裝可以先卸載舊版本 Docker
yum remove docker-ce
rm -rf /var/lib/docker
## 1.2 更新系統包 
yum -y update

# 2 訪問如下網站,下載 Docker RPM 包
# https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
# 例如下
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.3.ce-3.el7.x86_64.rpm

# 3 安裝
yum install docker-ce-18.06.3.ce-3.el7.x86_64.rpm

# 4 啓動
systemctl start docker
## 查看信息
docker info

2 配置國內鏡像源

這裏配置爲阿里的鏡像。訪問阿里雲官網 https://www.aliyun.com/ 登陸賬號,進入管理控制檯 --> 產品與服務 --> 彈性計算 --> 容器鏡像服務 --> 鏡像加速器,複製自己的專屬加速器地址。

vim /etc/docker/daemon.json

# 添加自己的鏡像地址,保存退出
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}

重新加載文件重啓 docker

systemctl daemon-reload
systemctl restart docker
# 查看啓動狀態
systemctl status docker

3 製作中文環境基礎版Centos7鏡像

3.1 Dockerfile

Dockerfile 形式,將下面配置內容放到環境中的某個目錄下 的Dockerfile 文件中。最後執行構建命令 docker build -t yore/centos7_v1 . 後面的 . 表示當前路徑。主要拉取一個 centos 7 最新版本,並安裝和設置中文語言環境。

FROM centos:7.8.2003

ENV LANG=zh_CN.UTF-8 \
    LANGUAGE=zh_CN:zh \
    LC_ALL=zh_CN.UTF-8

# Install tools
RUN yum update -y && \
    yum reinstall -y glibc-common && \
    yum install -y telnet net-tools && \
    yum clean all && \
    rm -rf /tmp/* rm -rf /var/cache/yum/* && \
    localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# Define default command.
CMD ["bash"]

查看本地鏡像

# 查看鏡像。會看到兩個,一個是原始鏡像,一個是自定義配置後的鏡像
docker images

3.2 啓動容器

# 1 運行。下面會對本容器做進一步的修改設置
#  -d 	後臺運行容器
#  -p  	指定端口映射,格式爲:主機(宿主)端口:容器端口
#  --name="yore_centos7"		爲容器指定一個名稱
#  -h "hostname"				    指定容器的hostname;
#  -m 	設置容器使用內存最大值;
#  --volume、-v					綁定一個卷
#  --privileged=false   指定容器是否爲特權容器,特權容器擁有所有的capabilities  
#  --cap-add=[], 			添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities
docker run --privileged=true --cap-add SYS_ADMIN -e container=docker -it \
-p 30022:22 -p 30080:80  -h "bigdata" \
--name="centos7_base" -d yore/centos7_v1:latest /usr/sbin/init

# 2 啓停容器
## 2.1 關閉容器
docker stop $CONTAINER_ID
## 2.2 啓動某個容器
docker start $CONTAINER_ID
## 2.3 移除容器
docker rm -f $CONTAINER_ID

# 3 刪除鏡像
## image rm 等價於 rmi
docker image rm $IMAGE_ID
## 如果有多個相同的 IMAGE ID 的刪除
docker rmi $REPOSITORY:$TAG

# 4 進入容器
docker exec -it $CONTAINER_ID /bin/bash
## 查看當前容器中 Centos7 版本
cat /etc/redhat-release

3.3 在容器中安裝配置一些基礎服務

# 1 爲了更好的編輯文件可以安裝 vim
yum install -y vim

# 2 爲了查看端口信息更方便可以安裝 lsof
yum install -y lsof

# 3 安裝 wget
yum install -y wget

# 4 安裝 tree
yum install -y tree

# 5 python 工具
yum install -y python-devel

# 6 安裝編譯 C 的環境
yum install -y gcc gcc-c++
yum install -y zlib
yum install -y zlib-devel
yum install -y tcl  build-essential tk gettext

爲了用戶登錄容器內的 Centos 配置的環境變量都生效,進行如下配置

 vim ~/.bashrc
 
 # 在最後添加 
 source /etc/profile

3.4 SSH

# 1 yum 安裝 spenssl 服務
yum -y install passwd openssl openssh-server  openssh-clients
mkdir  /var/run/sshd/

# 2 修改配置
vim /etc/ssh/sshd_config +39
##  大概在  38 - 45 行之間,修改或添加如下三個配置
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes 

# 3 sshd 服務的啓停
## 3.1 啓動
systemctl start sshd.service
##  3.2 查看 sshd 服務狀態
systemctl status sshd
## 3.3 停止
systemctl start sshd.service

# 4 設置爲開機自啓
systemctl enable sshd.service

# 【可跳過】5 生成ssh的密鑰和公鑰
# ssh-keygen -t rsa

# 6 查看 SSH 服務
lsof -i:22

# 7 設置 root 密碼(2020)
passwd

# 8 通過 ssh 訪問容器
ssh root@bigdata

3.5 【可選】修改容器配置

當我們的容器運行過程中需要修改一些配置信息,並生效到容器時,可以按照如下兩種方式操作,第一種方法操作簡單,但是需要重啓整個 Docker 服務,對應某些配置可能還無法生效;第二種方法是推薦的,直接在已有的容器下生成一個新的鏡像,以新鏡像重啓容器,不會對已有容器產生任何影響。

3.5.1 通過容器的配置文件

# 其中 hash_of_the_container 可以通過查看 CONTAINER ID 獲取     
vim /var/lib/docker/containers/${hash_of_the_container}/hostconfig.json

打開後這個是一個壓縮後的 json 文件,格式化可以看到 PortBindings,其中 HostPort 對應的是映射到宿主機的端口,22/tcp 對應的是容器內部的 22 端口,修改完後重啓容器 systemctl restart docker,然後將容器啓動 docker start $CONTAINER_ID,缺點就是每次改動Docker 服務要重啓,容器也需要重啓。

"NetworkMode": "default",
  "PortBindings": {
    "22/tcp": [
      {
        "HostIp": "bigdata01",
        "HostPort": "30022"
      }
    ],
    "80/tcp": [
      {
        "HostIp": "bigdata01",
        "HostPort": "30080"
      }
    ],
    "3306/tcp": [
      {
        "HostIp": "bigdata01",
        "HostPort": "33306"
      }
    ]
  }

3.5.2 通過 docker commit 方式

推薦方式docker commit 把一個容器的文件改動和配置信息 commit 到一個新的鏡像。這個在測試的時候會非常有用,把容器所有的文件改動和配置信息導入成一個新的docker鏡像,然後用這個新的鏡像重起一個容器,這對之前的容器不會有任何影響。

# 1 停止當前運行的容器
docker stop $CONTAINER_ID

# 2 commit 該 docker 容器
docker commit $CONTAINER_ID new_image:tag

# 3 查看當前的鏡像庫
docker images

# 4 用生成的新鏡像重新起一個容器
docker run --privileged=true --cap-add SYS_ADMIN -e container=docker -it \
-p 30022:22 -p 30080:80 -p 33306:3306 \
--name="yore_centos7_v2" -h "bigdata01"  -d yore/centos7_v2:latest /usr/sbin/init

3.6 製作爲本地鏡像

# 1 停止當前運行的容器
docker stop $CONTAINER_ID

# 2 commit 該 docker 容器
docker commit $CONTAINER_ID centos7_base:v1

# 3 查看當前的鏡像庫
docker images

3.7 鏡像提交到阿里雲鏡像庫

  1. 訪問阿里雲官網: https://www.aliyun.com/
  2. 登陸案例雲賬號
  3. 依次進入管理控制檯 --> 產品與服務 --> 彈性計算 --> 容器鏡像服務
  4. 命名空間:設置後不可修改,例如 yore
  5. 鏡像倉庫:命名空間選擇上面創建的 yore,創建鏡像倉庫,根據提示填寫信息(命名空間必選、倉庫名必填,摘要必填),代碼源可以綁定 Git變更後自動構建,這裏選擇本地倉庫,手動創建鏡像推送到倉庫。
  6. 訪問授權:目前案例雲只能通過 RAM 權限進行授權設置
    aliyun 訪問授權
  7. 訪問密碼:設置鏡像倉庫的密碼(固定、臨時)
    aliyun 訪問密碼
# 查看本地已有的鏡像
docker images

# 2 訪問憑證(前面設置的訪問憑證的固定密碼 )
sudo docker login --username=7910*****@qq.com registry.cn-shanghai.aliyuncs.com

# 3 tag
docker tag $IMAGE_ID registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1

# 4 push到阿里雲鏡像
docker push registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1

# 5 如果前面 tag 的鏡像需要刪除,執行如下命令
docker rmi $REPOSITORY:$TAG

3.8 使用提交到阿里雲的鏡像

上一步提交成功後,在阿里雲控制檯頁面可以看到如下我們提交的鏡像
anliyun my repository
本鏡像基於 Centos 7.8.2003,主要安裝了 vim、lsof、wget、tree、sshd 等服務。注意:啓動後 root 用戶的默認密碼爲 2020,爲了使系統更加安全,請先修改爲更加複雜的密碼。

# 查看當前 Docker 中有的鏡像
sudo docker images 

# 拉取上傳的鏡像
## 鏡像連接可以通過 基本信息 查看,有公網地址、專有網絡、經典網絡可選
sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003_v1

4 開發環境版 Centos7 鏡像

將開發中常用到的環境進行安裝和配置

# 1 運行。下面會對本容器做進一步的修改設置
# 以 base 鏡像爲準,啓動容器
docker run --privileged=true --cap-add SYS_ADMIN -e container=docker -it \
-p 30022:22 -p 30080:80  -h "bigdata01" \
--name="centos7_dev1" -d centos7_base:v1 /usr/sbin/init

# 2 進入容器
docker ps
docker exec -it $CONTAINER_ID /bin/bash

# 3 hosts 改爲。
172.17.0.3   yore.node1 bigdata01

4.1 JDK

# 1 下載。如果下面鏈接失效,則需要登錄Oracle的賬號,
# 訪問 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下載 jdk8
wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1573137213_adc79b33f2d9ed27cb8b09b6adf71820

# 2 解壓
tar -zxf jdk-8u231-linux-x64.tar.gz -C /usr/local/
chown root:root -R /usr/local/jdk1.8.0_231

# 3 配置環境變量
vim /etc/profile
# 添加如下配置
### set java environment
JAVA_HOME=/usr/local/jdk1.8.0_231
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

# 4 並加載生效:
source /etc/profile

# 5 爲了使每次進入容器時都生效
vim ~/.bashrc
# 最後一行添加,保存
source /etc/profile

# 6 查看Java版本
java -version

4.2 Git

# 1 下載源碼方式,
wget -O git-2.27.0.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.27.0.tar.gz

# 2 解壓
tar -zxf git-2.27.0.tar.gz -C /tmp/
cd /tmp/git-2.27.0 

# 3 檢驗相關依賴,設置安裝路徑
./configure --prefix=/usr/local/git

# 4 安裝
make && make install

# 5 創建軟連接
ln -s /usr/local/git/bin/git /usr/bin/git

# 6 查看版本
git -v

4.3 Maven

# 1 下載
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 2 解壓
tar -zxf apache-maven-3.6.3-bin.tar.gz
mv apache-maven-3.6.3 /usr/local/maven3

# 3 修改配置
vim /usr/local/maven3/conf/settings.xml

配置如下內容

<!--大概在 55 行左右添加,指定本地倉庫的路徑-->
 <localRepository>/opt/.m2/repo</localRepository>

 <!--大概在158 行左右,配置國內鏡像,這裏配置爲阿里 Maven 鏡像-->
<!-- 配置阿里雲的鏡像 -->
<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

<mirror>
  <id>central-repos1</id>
  <name>Central Repository 2</name>
  <url>https://repo1.maven.org/maven2/</url>
      <!-- 表示只爲central倉庫做鏡像,如果想爲所有的倉庫做鏡像那麼可以改爲 -->
  <mirrorOf>*</mirrorOf>
</mirror>

繼續完成下面的配置

# 4 配置環境變量,
vim /etc/profile
# set Maven environment
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$MAVEN_HOME/bin

# 5 生效
source /etc/profile

# 6 查看版本
mvn -version

4.4 Nginx

# 1 下載 Nginx 離線安裝包。以 x86、centos7版本爲例
wget http://nginx.org/packages/mainline/centos/7/x86_64/RPMS/nginx-1.17.6-1.el7.ngx.x86_64.rpm

# 2 安裝
rpm -ivh nginx-1.17.6-1.el7.ngx.x86_64.rpm

# 3 配置文件
/etc/nginx
# server 服務可以配置到下面路徑,以 .conf 結尾,重啓或使配置生效
/etc/nginx/conf.d/

# 4 常用命令
## 4.1 啓動,應爲已經將內部 80端口映射到了宿主機的 30080,所以通過宿主機 ip 和 30080 端口瀏覽器訪問
systemctl start nginx
## 4.2 狀態
systemctl status nginx
## 4.3 停止
systemctl stop nginx
## 4.4 重啓
systemctl restart nginx
## 4.5 配置重新生效
/usr/sbin/nginx -s reload

# 這裏提供的鏡像已停止了 Nginx 服務,在需要時請手動啓動

4.5 Node.js

# 1 下載
wget https://nodejs.org/dist/v12.18.2/node-v12.18.2-linux-x64.tar.xz

# 2 解壓
tar -xf node-v12.18.2-linux-x64.tar.xz
mv node-v12.18.2-linux-x64 /usr/local/nodejs

# 3 創建連接
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm

# 4 查看版本
node -v
npm -v

4.6 保存爲本地鏡像

# 1 停止當前運行的容器
docker stop $CONTAINER_ID

# 2 commit 該 docker 容器
docker commit $CONTAINER_ID centos7_dev:v1

# 3 查看當前的鏡像庫
docker images

4.7 鏡像提交到阿里雲鏡像庫

3.7 鏡像提交到阿里雲鏡像庫 步驟提交到阿里雲鏡像庫中

docker tag $IMAGE_ID registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003-dev_v1
docker push registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003-dev_v1

本鏡像基於 Centos 7,在中文基礎版上,又集成了 JDK 、Git、Maven、Nginx、Node.js 服務。注意:啓動後 root 用戶的默認密碼爲 2020,爲了使系統更加安全,請先修改爲更加複雜的密碼。

# 查看當前 Docker 中有的鏡像
sudo docker images 

# 拉取上傳的鏡像
## 鏡像連接可以通過 基本信息 查看,有公網地址、專有網絡、經典網絡可選
sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:7.8.2003-dev_v1

5 帶 MySQL 版Centos7鏡像

這裏在開發環境版的鏡像基礎上安裝 MySQL 數據庫

5.1 設置 Docker 網絡

# 1 查看存在的網絡(默認會創建三個)
#  bridge           橋接網絡。每次Docker容器重啓時,會按照順序獲取對應的IP地址,這個就導致重啓後 IP 地址可能會改變
#  host             主機網絡。Docker 容器的網絡會附屬在主機上,兩者是互通的。
#  none             容器就不會分配局域網的IP
[yore@VM_0_3_centos app]$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
ba8077c371b9        bridge              bridge              local
1be5b2b64e10        host                host                local
77ef163ae7c4        none                null                local

# 2 創建自定義的網絡。
# sudo docker network prune
# 注意:不能和已有的網段衝突
sudo docker network create --subnet=172.19.0.0/16 mynetwork

5.2 啓動容器

# 1 運行。下面會對本容器做進一步的修改設置
# 以 centos7_dev 鏡像爲準,啓動容器
# network 網絡方式指定爲前面自定義的 mynetwork,這樣我們可以直接指定 ip
docker run --privileged=true --cap-add SYS_ADMIN -e container=docker -it \
--network mynetwork --ip 172.19.0.2 -h "bigdata02" --name="dev_mysql_v1" \
-p 30022:22 -p 33306:3306 \
-d centos7_dev:v1 /usr/sbin/init

# 2 進入容器
docker ps
docker exec -it $CONTAINER_ID /bin/bash

# 3 【可選】hosts 改爲。也可以在 run 時指定
172.19.0.2   yore.node2 bigdata02

5.3 MySQL

MySQL 安裝詳見我的 blog CDH 6.2.0 或 6.3.0 安裝實戰及官方文檔資料鏈接#1.5 MySQL 內容。
• 系統中 mysql 用戶的默認密碼爲 mysql。安全起見,在公網下請修改爲密碼強度更大的密碼
• MySQL 默認開啓了 binlog。可以在配置文件中關閉掉。
• 當報 error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory,執行 yum -y install numactl.x86_64
• MySQL 數據庫管理員賬號 root 的密碼默認爲 123456。可以自行修改爲密碼強度更大的密碼。
• 默認情況下,遠程連接:mysql -h 宿主機ip -P 33306 -uroot -p

5.4 保存爲本地鏡像

# 1 停止當前運行的容器
# docker stop $CONTAINER_ID

# 2 commit 該 docker 容器
docker commit $CONTAINER_ID dev_mysql:v1

# 3 查看當前的鏡像庫
docker images

5.5 鏡像提交到阿里雲鏡像庫

3.7 鏡像提交到阿里雲鏡像庫 步驟提交到阿里雲鏡像庫中。

docker tag $IMAGE_ID registry.cn-shanghai.aliyuncs.com/yore/bigdata:dev-mysql_v1
docker push registry.cn-shanghai.aliyuncs.com/yore/bigdata:dev-mysql_v1

本鏡像基於 Centos 7,在開發環境版的基礎上,又集成了 MySQL 5.7 服務。注意:啓動後 系統 root 用戶的默認密碼爲 2020,爲了使系統更加安全,請先修改爲更加複雜的密碼。

# 查看當前 Docker 中有的鏡像
sudo docker images 

# 拉取上傳的鏡像
## 鏡像連接可以通過 基本信息 查看,有公網地址、專有網絡、經典網絡可選
sudo docker pull registry.cn-shanghai.aliyuncs.com/yore/bigdata:dev-mysql_v1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章