国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Docker】Docker學(xué)習(xí)④ - Docker鏡像與制作

這篇具有很好參考價(jià)值的文章主要介紹了【Docker】Docker學(xué)習(xí)④ - Docker鏡像與制作。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、Docker簡介

  • 參考:【Docker】Dokcer學(xué)習(xí)① - 簡介

二、Docker安裝及基礎(chǔ)命令介紹

  • 參考:【Docker】Docker學(xué)習(xí)② - Docker安裝及基礎(chǔ)命令介紹

三、Docker鏡像管理

  • 參考:【Docker】Docker學(xué)習(xí)③ - Docker鏡像管理

四、Docker鏡像與制作

docker鏡像有沒有內(nèi)核?

  • 從鏡像大小上面來說,一個(gè)比較小的鏡像只有十幾MB,而內(nèi)核文件需要一百多兆,因此鏡像里面是沒有內(nèi)核的,鏡像在被啟動(dòng)為容器后將直接使用宿主機(jī)的內(nèi)核,而鏡像本身則只提供相應(yīng)的rootfs,即系統(tǒng)正常運(yùn)行所必須的用戶空間的文件系統(tǒng),比如/dev,/proc,/bin,/etc等目錄,所以容器當(dāng)中基本是沒有/boot目錄的,而/boot當(dāng)中保存的就是與內(nèi)核相關(guān)的文件和目錄。

為什么沒有內(nèi)核?

  • 由于容器啟動(dòng)和運(yùn)行過程中是直接使用了宿主機(jī)的內(nèi)核,所以沒有直接調(diào)用過物理硬件,所以也不會(huì)涉及到硬件驅(qū)動(dòng),因此也用不上內(nèi)核和驅(qū)動(dòng),另外有內(nèi)核的那是虛擬機(jī)。

1. 手動(dòng)制作yum版nginx鏡像

Docker制作類似于虛擬機(jī)的鏡像制作,即按照公司的實(shí)際業(yè)務(wù)需求將需要安裝的軟件、相關(guān)配置等基礎(chǔ)環(huán)境配置完成,然后將其做成鏡像,最后再批量從鏡像批量生產(chǎn)實(shí)例,這樣可以極大的簡化相同環(huán)境的部署工作,Docker的鏡像制作分為手動(dòng)制作和自動(dòng)制作(基于DockerFile),企業(yè)通常都是基于Dockerfile制作精細(xì),其中手動(dòng)制作鏡像步驟具體如下:

  • 1.1 下載鏡像并初始化系統(tǒng)
    基于某個(gè)基礎(chǔ)鏡像之上重新制作,因此需要先有一個(gè)基礎(chǔ)鏡像,本次使用官方提供的centos鏡像為基礎(chǔ):
    docker pull centos
	docker run -it docker.io/centos /bin/bash
	yum install wget -y
	cd /etc/yum.repos.d/
	rm -rf ./* #更改yum源
	wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
	wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  • 1.2 yum安裝并配置nginx
	yum install nginx -y 
	yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop 
  • 1.3 關(guān)閉nginx后臺運(yùn)行
	vim /etc/nginx/nginx.conf
	user nginx;
	worker_processes auto;
	error_log /var/log/nginx/error.log;
	pid /run/nginx.pid;
	daemon off;#關(guān)閉后臺運(yùn)行
  • 1.4 自定義web頁面
	vim /usr/share/nginx/html/index.html
	cat /usr/share/nginx/html/index.html
	Docker Yum Nginx #自定義web界面
  • 1.5 提交為鏡像
    在宿主機(jī)基于容器ID提交為鏡像
    docker commit --help
    日志:
	[root@gbase8c_private ~]# docker commit --help
	Usage:	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
	Create a new image from a container's changes
	Options:
	-a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
	-c, --change list      Apply Dockerfile instruction to the created image
	-m, --message string   Commit message
	-p, --pause            Pause container during commit (default true)

docker commit -a “123456789@qq.com” -m “nginx yum v1” --change=“EXPOSE 80 443” 容器ID centos-nginx:v1
日志:

	[root@gbase8c_private ~]# docker commit -a "123456789@qq.com" -m "nginx yum v1" --change="EXPOSE 80 443" 6806eb0bfd6b centos-nginx:v1
	sha256:a93983db5db7f14b028edf94407ed1352efadf62dac88f6806366379a943403e
  • 1.6 帶tag的鏡像提交
    提交的時(shí)候標(biāo)記tag號,標(biāo)記tag號,生產(chǎn)當(dāng)中比較常用,后期可以根據(jù)tag標(biāo)記創(chuàng)建不同版本的鏡像以及創(chuàng)建不同版本的容器
    docker commit -m “nginx image” 容器ID jack/centos-nginx:v1
    日志:
	[root@gbase8c_private ~]# docker commit -m "nginx image" 6806eb0bfd6b jack/centos-nginx:v1
	sha256:cd4faded8f63c375fbc924ab20173f00cecb4cb52ea0fbfb3041d41fb327c343
	[root@gbase8c_private ~]# docker images -a
	REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
	jack/centos-nginx   v1                  cd4faded8f63        59 seconds ago      431MB
	centos-nginx        v1                  a93983db5db7        2 minutes ago       431MB
  • 1.7 從自己鏡像啟動(dòng)容器
    docker run -d -p 80:80 --name my-centos-nginx jack/centos-nginx /usr/sbin/nginx
    日志:
	[root@gbase8c_private ~]# docker run -d -p 80:80 --name my-centos-nginx centos-nginx:v1 /usr/sbin/nginx
	6cbb96e413b80336172714736302bdae09e5351e844a209518e09160fb9cb5c5

2. DockerFile制作yum版nginx鏡像

DockerFile可以說是一種可以被Docker程序解釋的腳本,DockerFile是由一條條的命令組成的,每條命令對應(yīng)linux下面的一條命令,Docker程序?qū)⑦@些DockerFile指令再翻譯成真正的linux命令,其有自己的書寫方式和支持的命令,Docker程序讀取DockerFile并根據(jù)指令生成Docker鏡像,相比手動(dòng)制作鏡像的方式,DockerFile更能直觀的展示鏡像是怎么產(chǎn)生的,有了DockerFile,當(dāng)后期有額外的需求時(shí),只要在之前的DockerFile添加或者修改相應(yīng)的命令即可重新生成新的Docker鏡像,避免了重復(fù)手動(dòng)制作鏡像的麻煩,具體如下:

  • 2.1 下載鏡像并初始化系統(tǒng)
	docker pull centos
	docker run -it docker.io/centos /bin/bash
	cd /opt/
	mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv

目錄結(jié)構(gòu)按照業(yè)務(wù)類型或系統(tǒng)類型等方式劃分,方便后期鏡像比較多的時(shí)候進(jìn)行分類

  • 2.2 編寫Dockerfile
    cd /opt/dockerfile/web/nginx
    vim ./Dockerfile #生成鏡像的時(shí)候,會(huì)在執(zhí)行命令的當(dāng)前目錄查找Dockerfile文件,所以名稱不可寫錯(cuò),而且D必須大寫
#My Dockerfile
#"#"為注釋,等于shell腳本中的#
#除了注釋行之外的第一行,必須是From xxx(xxx是基礎(chǔ)鏡像)
#第一行先定義基礎(chǔ)鏡像,后面的本地有效的鏡像名,如果本地沒有會(huì)從遠(yuǎn)程倉庫下載,第一行很重要
From centos 

#鏡像維護(hù)者的信息
MAINTAINER jack.Zhang 123456@qq.com

#########其他可選參數(shù)###########
#USER  #指定該容器運(yùn)行時(shí)的用戶名和UID,后續(xù)的RUN命令也會(huì)使用這里指定的用戶執(zhí)行
#WORKDIR /a
#WORKDIR b #指定工作目錄,最終為/a/b
#VOLUME ["/dir_1","/dir_2"]  #設(shè)置容器掛載主機(jī)目錄
#ENV name jack #設(shè)置容器變量,常用于向容器內(nèi)傳遞用戶密碼等

################################
#執(zhí)行的命令,將編譯安裝nginx的步驟執(zhí)行一遍
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
#以下為centos8需要
RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop make
#自動(dòng)解壓壓縮包
ADD nginx-1.22.1.tar.gz /usr/local/src/  
RUN cd /usr/local/src/nginx-1.22.1 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
RUN cd /usr/local/nginx
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "test nginx page" > /usr/local/nginx/html/index.html
EXPOSE 80 443  
#向外開放的端口,多個(gè)端口用空格做間隔,啟動(dòng)容器時(shí)候-p需要使用此端口向外映射,如-p 8081:80,則80就是這里的80
CMD ["nginx"] 
#運(yùn)行的命令,每個(gè)Dockerfile只能有一條,如果有多條則只有最后一條被執(zhí)行
#如果再從該鏡像啟動(dòng)容器的時(shí)候也指定了命令,那么指定的命令會(huì)覆蓋Dockerfile構(gòu)建的鏡像里面的CMD命令,即指定的命令優(yōu)先級更高,Dockerfile的優(yōu)先級較低一些
  • 2.3 準(zhǔn)備源碼包與配置文件
[root@gbase8c_private nginx]# cp /usr/local/nginx/conf/nginx.conf .    #配置文件關(guān)閉后臺運(yùn)行
[root@gbase8c_private nginx]# cp /usr/local/src/nginx-1.22.1.tar.gz .   #nginx 源碼包
  • 2.4 執(zhí)行鏡像構(gòu)建
    docker build -t jack/nginx-1.22.1:v1 /opt/dockerfile/web/nginx
    日志:
	[root@gbase8c_private nginx]# docker build -t jack/nginx-1.22.1:v1 /opt/dockerfile/web/nginx
	Sending build context to Docker daemon  1.082MB
	Step 1/15 : From centos
	---> 5d0da3dc9764
	Step 2/15 : MAINTAINER jack.Zhang 123456@qq.com
	---> Using cache
	---> 43ec73180728
	Step 3/15 : RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
	---> Using cache
	---> e143ccac7d7d
	Step 4/15 : RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
	---> Using cache
	---> b844d534721f
	Step 5/15 : RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
	---> Using cache
	---> 9e3a042b490c
	Step 6/15 : RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop make
	---> Using cache
	---> df76eecdf09f
	Step 7/15 : ADD nginx-1.22.1.tar.gz /usr/local/src/
	---> Using cache
	---> 98025681ea35
	Step 8/15 : RUN cd /usr/local/src/nginx-1.22.1 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
	---> Using cache
	---> 96186cea028e
	Step 9/15 : RUN cd /usr/local/nginx
	---> Using cache
	---> 4156022d8485
	Step 10/15 : ADD nginx.conf /usr/local/nginx/conf/nginx.conf
	---> Using cache
	---> 1c048d8e231e
	Step 11/15 : RUN useradd nginx -s /sbin/nologin
	---> Using cache
	---> b354065c9fc2
	Step 12/15 : RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
	---> Using cache
	---> a5b3a6e665f3
	Step 13/15 : RUN echo "test nginx page" > /usr/local/nginx/html/index.html
	---> Running in 7d4595c415e8
	Removing intermediate container 7d4595c415e8
	---> 242a23ccac4c
	Step 14/15 : EXPOSE 80 443
	---> Running in 7fd3a8e9c72d
	Removing intermediate container 7fd3a8e9c72d
	---> 280671c13521
	Step 15/15 : CMD ["nginx"]
	---> Running in 866bfe9c8e53
	Removing intermediate container 866bfe9c8e53
	---> fdfce08f491f
	Successfully built fdfce08f491f
	Successfully tagged jack/nginx-1.22.1:v1
	[root@gbase8c_private nginx]# docker images
	REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
	jack/nginx-1.22.1   v1                  fdfce08f491f        30 seconds ago      638MB
  • 2.5 從鏡像啟動(dòng)容器
    docker run -d -p 80:80 --name yum-nginx jack/nginx-1.22.1:v1 /usr/sbin/nginx
    日志:
	[root@gbase8c_private nginx]# docker run -d -p 80:80 --name yum-nginx  jack/nginx-1.22.1:v1 /usr/sbin/nginx
	2649a84740d66098c1841387d306a245ee618f12a0df143ab0be5d7ab93c9c9d
	[root@gbase8c_private nginx]# docker ps -a 
	CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS                         PORTS               NAMES
	2649a84740d6        jack/nginx-1.22.1:v1   "/usr/sbin/nginx"         16 seconds ago      Exited (1) 15 seconds ago                          yum-nginx

↑容器并未成功啟動(dòng),問題原因:

	[root@gbase8c_private nginx]# docker logs cb332665fbdf
	nginx: [emerg] open() "/var/log/nginx/error.log" failed (2: No such file or directory)
	nginx: [emerg] open() "/var/log/nginx/error.log" failed (2: No such file or directory)
	nginx: [emerg] open() "/var/log/nginx/error.log" failed (2: No such file or directory)
	[root@gbase8c_private nginx]# head -n 10 nginx.conf 
	#user  nobody;
	user nginx;
	worker_processes auto;
	error_log /var/log/nginx/error.log;  - 》》》 /run/error.log
	pid /run/nginx.pid;
	daemon off;
  • ?原因:在 Docker 容器里面使用 root 用戶的話,是不安全的,很容易出現(xiàn)越權(quán)的安全問題,所以一般情況下,我們都會(huì)使用普通用戶來代替 root 進(jìn)行服務(wù)的啟動(dòng)和管理的。
  • ?解決辦法:發(fā)現(xiàn)還是 nginx.conf 配置文件,配置的有問題,需要將 Nginx 服務(wù)啟動(dòng)時(shí)候需要的文件都配置到一個(gè)無權(quán)限的目錄,即可解決

3. 手動(dòng)制作編譯版本nginx鏡像

過程為在centos基礎(chǔ)鏡像之上手動(dòng)安裝nginx,然后再提交為鏡像

  • 3.1 下載鏡像并初始化系統(tǒng)
	docker pull centos
	docker run -it docker.io/centos /bin/bash
	yum install wget -y
	cd /etc/yum/repos.d/
	sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
	sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*

?不行再慎用↓

	rm -rf ./* #更改yum源
	wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
	wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  • 3.2 編譯安裝nginx
	yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop make
	cd /usr/local/src/
	wget http://nginx.org/download/nginx-1.22.1.tar.gz
	tar xvf nginx-1.22.1.tar.gz
	cd nginx-1.22.1
	./configure --prefix=/usr/local/nginx --with-http_sub_module
	make && make install
  • 3.3 關(guān)閉nginx后臺運(yùn)行
	vim /usr/local/nginx/conf/nginx.conf
	user nginx;
	worker_processes  auto;
	daemon off;
	ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx #創(chuàng)建軟連
  • 3.4 創(chuàng)建用戶及授權(quán)
	useradd nginx -s /sbin/nologin
	chown nginx.nginx /usr/local/nginx -R
  • 3.5 自定義web界面
	echo "My Nginx Test Page" > /usr/local/nginx/html/index.html
  • 3.6 提交為鏡像
	docker commit -m "test nginx" 88c367f1f97f jack/nginx-test-image:v1
  • 3.7 從自己的鏡像啟動(dòng)容器
	docker run -d -p 80:80 --name my-centos-nginx jack/nginx-test-image:v1 /usr/sbin/nginx
  • 3.8 查看nginx訪問日志
    日志:
	[root@gbase8c_private nginx]# docker run -d -p 80:80 --name my-centos-nginx jack/nginx-test-image:v1 /usr/sbin/nginx
	e21b3af797570e7cd0a1426a74fa2953e282175e0793df70dc351fdf8767a036
	[root@gbase8c_private nginx]# docker ps -a
	CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS                      PORTS                NAMES
	e21b3af79757        jack/nginx-test-image:v1   "/usr/sbin/nginx"   4 seconds ago       Up 3 seconds                0.0.0.0:80->80/tcp   my-centos-nginx
	88c367f1f97f        centos                     "/bin/bash"         9 minutes ago       Exited (0) 2 minutes ago                         naughty_noyce
	7929901f31c9        jack/nginx-1.22.1:v1       "/usr/sbin/nginx"   27 minutes ago      Exited (0) 19 seconds ago                        yum-nginx
	[root@gbase8c_private nginx]# docker inspect -f "{{.State.Pid}}" e21b3af79757
	16623
	[root@gbase8c_private nginx]# nsenter -t 16623 -m -u -i -n -p
	[root@e21b3af79757 /]# tail -f /usr/local/nginx/logs/access.log 
	192.168.56.1 - - [28/Nov/2023:14:33:18 +0000] "GET / HTTP/1.1" 200 19 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
	192.168.56.1 - - [28/Nov/2023:14:35:02 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
	192.168.56.1 - - [28/Nov/2023:14:35:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
	192.168.56.1 - - [28/Nov/2023:14:35:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"

4. 自定義tomcat鏡像

基于官方提供的centos 基礎(chǔ)鏡像構(gòu)建JDK和tomcat鏡像,先構(gòu)建JDK鏡像,然后再基于JDK鏡像構(gòu)建tomcat鏡像

  • 4.1 構(gòu)建JDK鏡像
	docker pull centos
	mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv
	cd /opt/dockerfile/web/jdk
	vim Dockerfile
#JDK Base Image
FROM centos:latest
MAINTAINER jack.Zhang 123456@qq.com
ADD jdk-8u391-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_391 /usr/local/jdk
ADD profile /etc/profile
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
  • 4.2 上傳JDK壓縮包和profile文件
    將JDK壓縮包上傳到Dockerfile當(dāng)前目錄,然后執(zhí)行構(gòu)建:
  • 4.3 執(zhí)行構(gòu)建鏡像
	cat build-command.sh
#!/bin/bash
docker build -t centos-8-jdk:v1 .

日志:

	[root@gbase8c_private jdk]# bash build-command.sh 
	Sending build context to Docker daemon  141.9MB
	Step 1/10 : FROM centos-7.5:latest
	pull access denied for centos-7.5, repository does not exist or may require 'docker login'
	[root@gbase8c_private jdk]# vim Dockerfile 
	[root@gbase8c_private jdk]# bash build-command.sh 
	Sending build context to Docker daemon  141.9MB
	Step 1/10 : FROM centos:latest
	---> 5d0da3dc9764
	Step 2/10 : MAINTAINER jack.Zhang 123456@qq.com
	---> Using cache
	---> 43ec73180728
	Step 3/10 : ADD jdk-8u391-linux-x64.tar.gz /usr/local/src/
	---> 21764746d490
	Step 4/10 : RUN ln -sv /usr/local/src/jdk-8u391-linux-x64/usr/local/jdk
	---> Running in a22ecd27e9f8
	'./jdk' -> '/usr/local/src/jdk-8u391-linux-x64/usr/local/jdk'
	Removing intermediate container a22ecd27e9f8
	---> 2f99e9a548c1
	Step 5/10 : ADD profile /etc/profile
	---> aef302c8a3da
	Step 6/10 : ENV JAVA_HOME /usr/local/jdk
	---> Running in 47c346592718
	Removing intermediate container 47c346592718
	---> da9972f86cd2
	Step 7/10 : ENV JRE_HOME $JAVA_HOME/jre
	---> Running in c83345919c81
	Removing intermediate container c83345919c81
	---> 460916698ef9
	Step 8/10 : ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
	---> Running in 5114c8a4b7d9
	Removing intermediate container 5114c8a4b7d9
	---> d1d448d0c77c
	Step 9/10 : ENV PATH $PATH:$JAVA_HOME/bin
	---> Running in ae28d4c66b9e
	Removing intermediate container ae28d4c66b9e
	---> 3ae8ad1733b5
	Step 10/10 : RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
	---> Running in 2690a5bb592f
	Removing intermediate container 2690a5bb592f
	---> 2db525ca3854
	Successfully built 2db525ca3854
	Successfully tagged centos-8-jdk:v1
  • 4.4 從鏡像啟動(dòng)容器
	docker run -it centos-8-jdk bash
	docker run -it --rm centos-8-jdk:v1 bash
	[root@gbase8c_private jdk]# docker run -it --rm centos-8-jdk:v1 bash
	[root@76ab942d4101 /]# java -version
	java version "1.8.0_391"
	Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
	Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
	[root@76ab942d4101 /]# date
	Thu Dec  7 21:48:47 CST 2023
  • 4.5 將鏡像上傳到harbor
	docker push centos-8-jdk:v1
	docker tag centos-8-jdk:v1 192.168.56.199/jdk/centos-8-jdk:v1

日志:

	[root@gbase8c_private harbor]# docker push 192.168.56.199/jdk/centos-8-jdk:v1
	The push refers to repository [192.168.56.199/jdk/centos-8-jdk]
	7fea194b5bd5: Pushed 
	fd55b5f95a06: Pushed 
	9bf99e4f3d89: Pushed 
	a74f8d8f2d28: Pushed 
	74ddd0ec08fa: Pushed 
	v1: digest: sha256:d43557182e4e243522036f884d79d7b8c3ccc3eaf727a3bdd56a44ce20976583 size: 1363
  • 4.6 下載鏡像并啟動(dòng)JDK容器
    日志:
	[root@gbase8c_private harbor]# docker pull 192.168.56.199/jdk/centos-8-jdk:v1
	v1: Pulling from jdk/centos-8-jdk
	Digest: sha256:d43557182e4e243522036f884d79d7b8c3ccc3eaf727a3bdd56a44ce20976583
	Status: Image is up to date for 192.168.56.199/jdk/centos-8-jdk:v1
	[root@gbase8c_private harbor]# docker run -it --rm 192.168.56.199/jdk/centos-8-jdk:v1 bash
	[root@5b4cfa6cbf5a /]# date
	Sun Dec 10 20:38:53 CST 2023
	[root@5b4cfa6cbf5a /]# java -version
	java version "1.8.0_391"
	Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
	Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
  • 4.7 從JDK鏡像構(gòu)建tomcat 8 Base 鏡像:
    • 4.7.1 編輯DockerFile:
	cd /opt/dockerfile/system/centos/tomcat8-base
	vim Dockerfile
#Tomcat Base Image
From 192.168.56.199/jdk/centos-8-jdk:v1
RUN useradd www -u 2000

#ADD del_tomcatlog.sh /root/script
#RUN echo "0 2 * * * /bin/bash /root/script/del_tomcatlog.sh &> /dev/null" >> /var/spool/cron/root

#env settinf
ENV TZ "Asiz/Shanghai"
ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION 8.5.96
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps

#tomcat settinf
RUN mkdir /apps
ADD apache-tomcat-8.5.96.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.96 /apps/tomcat
  • 4.7.2 通過腳本構(gòu)建tomcat基礎(chǔ)鏡像
	cat build-command.sh 
	#!/bin/bash
	docker build -t tomcat8-base:v1 .

日志:

	[root@gbase8c_private tomcat8-base]# bash build-command.sh 
	Sending build context to Docker daemon  10.78MB
	Step 1/12 : From 192.168.56.199/jdk/centos-8-jdk:v1
	---> a2b742b94015
	Step 2/12 : RUN useradd www -u 2000
	---> Running in d19d27df0448
	Removing intermediate container d19d27df0448
	---> 1bf6e78dc7c7
	Step 3/12 : ENV TZ "Asiz/Shanghai"
	---> Running in a99f9eb322cc
	Removing intermediate container a99f9eb322cc
	---> 95c6a3cefc7f
	Step 4/12 : ENV LANG en_US.UTF-8
	---> Running in 805840b54de5
	Removing intermediate container 805840b54de5
	---> 7aab23b04eef
	Step 5/12 : ENV TERM xterm
	---> Running in 4ae0182d2195
	Removing intermediate container 4ae0182d2195
	---> 0804043c7b14
	Step 6/12 : ENV TOMCAT_MAJOR_VERSION 8
	---> Running in c825fe92e42d
	Removing intermediate container c825fe92e42d
	---> 4d6fcd259f9c
	Step 7/12 : ENV TOMCAT_MINOR_VERSION 8.5.96
	---> Running in b4b7a0ed2797
	Removing intermediate container b4b7a0ed2797
	---> 626d7d9d2478
	Step 8/12 : ENV CATALINA_HOME /apps/tomcat
	---> Running in 37e5aff7d23c
	Removing intermediate container 37e5aff7d23c
	---> eb992444e7f6
	Step 9/12 : ENV APP_DIR ${CATALINA_HOME}/webapps
	---> Running in de3421e3d164
	Removing intermediate container de3421e3d164
	---> 03766db8ca90
	Step 10/12 : RUN mkdir /apps
	---> Running in 5ba348fd64b4
	Removing intermediate container 5ba348fd64b4
	---> 5d60c75f47ec
	Step 11/12 : ADD apache-tomcat-8.5.96.tar.gz /apps
	---> cac315a6fd1b
	Step 12/12 : RUN ln -sv /apps/apache-tomcat-8.5.96 /apps/tomcat
	---> Running in 919329b80388
	'/apps/tomcat' -> '/apps/apache-tomcat-8.5.96'
	Removing intermediate container 919329b80388
	---> 2ab037a507a7
	Successfully built 2ab037a507a7
	Successfully tagged tomcat8-base:v1
	[root@gbase8c_private tomcat8-base]# docker images
	REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
	tomcat8-base                      v1                  2ab037a507a7        8 seconds ago       597MB
  • 4.8 構(gòu)建業(yè)務(wù)鏡像1、2
    創(chuàng)建tomcat-app1 和 tomcat-app2兩個(gè)目錄,代表不同的兩個(gè)基于tomcat的業(yè)務(wù)。
    • 4.8.1 準(zhǔn)備Dockerfile
	cd /opt/dockerfile/system/centos/tomcat-app1
	vim Dockerfile
#Tomcat Web Image
FROM tomcat8-base:v1
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD myapp/* /apps/tomcat/webapps/myapp/
RUN chown www.www /apps/ -R
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
EXPOSE 8080 8009
  • 4.8.2 準(zhǔn)備自定義myapp頁面
	mkdir myapp
	echo "Tomcat Web Page1" > myapp/index.html
	cat myapp/index.html
  • 4.8.3 準(zhǔn)備容器啟動(dòng)執(zhí)行腳本
	cat run_tomcat.sh
#!/bin/bash
echo "1.1.1.1 abc.test.com" >> /etc/hosts
echo "nameserver 223.5.5.5" > /etc/resolv.conf
su - www -c "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin && export JAVA_HOME=/usr/local/jdk && export JRE_HOME=/usr/local/jdk/jre && export CLASSPATH=/usr/local/jdk/lib/:/usr/local/jdk/jre/lib/ && /apps/tomcat/bin/catalina.sh start && tail -f /etc/hosts"
#這里沒有繼承主機(jī)的環(huán)境變量,有沒有懂哥。。。。
#su - www -c "/apps/tomcat/bin/catalina.sh start"

#su - www -c “tail -f /etc/hosts”

  • 4.8.4 準(zhǔn)備構(gòu)建腳本
	vim build-command.sh
#!/bin/bash
docker build -t tomcat-web:app1 .

日志:

	[root@gbase8c_private tomcat-app1]# bash build-command.sh 
	Sending build context to Docker daemon  5.632kB
	Step 1/6 : FROM tomcat8-base:v1
	---> 2ab037a507a7
	Step 2/6 : ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
	---> 09983a7133b8
	Step 3/6 : ADD myapp/* /apps/tomcat/webapps/myapp/
	---> c5a2afd16dc5
	Step 4/6 : RUN chown www.www /apps/ -R
	---> Running in 869d5623188c
	Removing intermediate container 869d5623188c
	---> c481b86618b4
	Step 5/6 : CMD ["/apps/tomcat/bin/run_tomcat.sh"]
	---> Running in a90ab30a9c8e
	Removing intermediate container a90ab30a9c8e
	---> e5742f33c2bd
	Step 6/6 : EXPOSE 8080 8009
	---> Running in 15dea2dd3a7a
	Removing intermediate container 15dea2dd3a7a
	---> 891a81d08424
	Successfully built 891a81d08424
	Successfully tagged tomcat-web:app1
	[root@gbase8c_private tomcat-app2]# docker images
	REPOSITORY                        TAG                 IMAGE ID            CREATED              SIZE
	tomcat-web                        app2                1c4e68330d53        3 seconds ago        612MB
	tomcat-web                        app1                891a81d08424        About a minute ago   612MB
  • 4.8.5 從鏡像啟動(dòng)容器測試
	docker run -it -d -p 8888:8080 tomcat-web:app1
	docker run -it -d -p 8889:8080 tomcat-web:app2

5. 構(gòu)建haproxy鏡像

  • 5.1 準(zhǔn)備Dockerfile
	cd /opt/dockerfile/system/centos/haproxy
	vim Dockerfile
#Haproxy Base Image
FROM centos:latest
MAINTAINER zhangshijie "zhangshijie@300.cm"
RUN yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate -y
ADD haproxy-1.8.31.tar.gz /usr/lib/src/
RUN cd /usr/local/src/haproxy-1.8.31 && make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy && make install PRFEIX=/usr/local/haproxy && cp haproxy /usr/sbin/ && mkdir /usr/local/haproxy/run
ADD haproxy.cfg /etc/haproxy

ADD run_haproxy.sh /usr/bin
EXPOSE 80 9999
CMD ["/usr/bin/run_haproxy.sh"]
  • 5.2 準(zhǔn)備haproxy配置文件
	cat haproxy.cfg
global
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon 
nbproc 1
pidfile /usrs/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option forwardfor
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen stats
    mode http
	bind 0.0.0.0:9999
	stats enable
	log global
	stats uri  /haproxy-status
	stats auth haadmin:q1w2e3r4ys

listen web_port
    bind 0.0.0.0:80
	mode http
	log global
	balance roundrobin
	server web1 192.168.56.199:8888 check inter 3000 fall 2 rise 5
	server web2 192.168.56.199:8889 check inter 3000 fall 2 rise 5
  • 5.3 準(zhǔn)備構(gòu)建腳本
	cat build-command.sh
#!/bin/bash
docker build -t centos-haproxy-bash:7.5-1.8.31 .
  • 5.4 執(zhí)行構(gòu)建haproxy鏡像
  • 5.5 從鏡像啟動(dòng)容器
docker run -it -d -p80:80 -p9999:9999 centos-haproxy-bash:7.5-1.8.31 

6. 本地鏡像上傳至官方docker倉庫

將自制的鏡像上傳至docker倉庫,https://hub.docker.com/

  • 6.1 準(zhǔn)備賬戶
    登錄到docker hub 官網(wǎng)創(chuàng)建賬戶,登陸后點(diǎn)擊settings完善賬戶信息
  • 6.2 在虛擬機(jī)使用自己的賬號登錄
	docker login https://hub.docker.com/
  • 6.3 查看認(rèn)證信息
    登錄成功之后會(huì)在當(dāng)前目錄生成一個(gè)隱藏文件用戶保存登錄認(rèn)證信息
cat .docker/config.json
  • 6.4 給鏡像做tag并開始上傳
	docker images
	docker tag xxxx  docker.io/ck/centos-nginx
	docker login
	docker push xxxxx
  • 6.5 到官方驗(yàn)證
  • 6.6 更換到其他docker服務(wù)器下載鏡像,并啟動(dòng)

五、Docker數(shù)據(jù)管理

  • 參考:【Docker】Docker學(xué)習(xí)⑤ - Docker數(shù)據(jù)管理

六、網(wǎng)絡(luò)部分

  • 參考:【Docker】Docker學(xué)習(xí)⑥ - 網(wǎng)絡(luò)部分

七、Docker倉庫之單機(jī)Dokcer Registry

  • 參考:【Docker】Docker學(xué)習(xí)⑦ - Docker倉庫之單機(jī)Dokcer Registry

八、Docker倉庫之分布式Harbor

  • 參考:【Docker】Docker學(xué)習(xí)⑧ - Docker倉庫之分布式Harbor

九、單機(jī)編排之Docker Compose

  • 參考:【Docker】Docker學(xué)習(xí)⑨ - 單機(jī)編排之Docker Compose文章來源地址http://www.zghlxwxcb.cn/news/detail-818830.html

到了這里,關(guān)于【Docker】Docker學(xué)習(xí)④ - Docker鏡像與制作的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 根據(jù)自己修改后的容器制作鏡像并上傳docker hub

    要將自己的鏡像上傳到Docker Hub,可以按照以下步驟進(jìn)行操作: 首先,確保已經(jīng)在本地構(gòu)建好了需要上傳的 Docker 鏡像。如果還沒有構(gòu)建,可以使用 docker build 命令來創(chuàng)建鏡像。 登錄到 Docker Hub 賬號。打開終端或命令提示符,運(yùn)行以下命令并輸入相應(yīng)的用戶名和密碼: docker

    2024年01月21日
    瀏覽(20)
  • Docker介紹下載安裝、制作鏡像及容器、做目錄映射、做端口映射

    Docker介紹下載安裝、制作鏡像及容器、做目錄映射、做端口映射

    在計(jì)算機(jī)中,虛擬化(英語:Virtualization)是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來,打破實(shí)體結(jié)構(gòu)間的不可切割的障礙,使用戶可以比原本的組態(tài)更好的方式來應(yīng)用這些資源。這些資源的新虛擬部份是

    2023年04月12日
    瀏覽(30)
  • 【Docker】Docker學(xué)習(xí)④ - Docker鏡像與制作

    參考:【Docker】Dokcer學(xué)習(xí)① - 簡介 參考:【Docker】Docker學(xué)習(xí)② - Docker安裝及基礎(chǔ)命令介紹 參考:【Docker】Docker學(xué)習(xí)③ - Docker鏡像管理 docker鏡像有沒有內(nèi)核? 從鏡像大小上面來說,一個(gè)比較小的鏡像只有十幾MB,而內(nèi)核文件需要一百多兆,因此鏡像里面是沒有內(nèi)核的,鏡像在

    2024年01月23日
    瀏覽(95)
  • Windows環(huán)境下清華ChatGLM3+docker-desktop鏡像制作和配置GPU環(huán)境docker容器本地運(yùn)行

    (1)下載或git拉取ChatGLM3鏡像 ? 拉取鏡像,配置環(huán)境在此文就不多贅述? ?git clone?https://github.com/THUDM/ChatGLM3.git (2)docker-desktop的安裝 這里引用這位大佬的文章,講的很詳細(xì)

    2024年02月19日
    瀏覽(32)
  • Docker學(xué)習(xí)路線7:構(gòu)建容器鏡像

    容器鏡像是可執(zhí)行的軟件包,包括運(yùn)行應(yīng)用程序所需的所有內(nèi)容:代碼、運(yùn)行時(shí)、系統(tǒng)工具、庫和設(shè)置。通過構(gòu)建自定義鏡像,您可以在任何支持Docker的平臺上無縫地部署應(yīng)用程序及其所有依賴項(xiàng)。 構(gòu)建容器鏡像的關(guān)鍵組件是 Dockerfile 。它本質(zhì)上是一個(gè)包含有關(guān)如何組裝 D

    2024年02月16日
    瀏覽(29)
  • docker學(xué)習(xí)(四)使用 commit 制作鏡像

    docker學(xué)習(xí)(一)docker 概述 docker學(xué)習(xí)(二)docker 安裝部署 docker學(xué)習(xí)(三)常用命令 docker學(xué)習(xí)(四)使用 commit 制作鏡像 docker學(xué)習(xí)(五)使用 Dockerfile 制作鏡像 docker學(xué)習(xí)(六)卷 Volume docker學(xué)習(xí)(七)docker daemon docker學(xué)習(xí)(八)HTTP/HTTPS 代理 docker學(xué)習(xí)(九)docker 調(diào)試 docker學(xué)習(xí)

    2024年02月14日
    瀏覽(86)
  • docker 保存鏡像、容器與導(dǎo)入鏡像容器

    可以通過以下步驟將Docker鏡像導(dǎo)出到另一臺計(jì)算機(jī)上: 在本地計(jì)算機(jī)上使用以下命令將Docker鏡像保存為tar文件: 其中,image-name是要導(dǎo)出的Docker鏡像的名稱。 將保存的tar文件傳輸?shù)搅硪慌_計(jì)算機(jī)上,可以使用scp命令或其他文件傳輸工具。 在目標(biāo)計(jì)算機(jī)上使用以下命令將tar文

    2024年02月13日
    瀏覽(26)
  • docker導(dǎo)出鏡像、容器打鏡像

    有兩種方法,一種是通過容器,一種是通過鏡像 1 首先使用 docker ps -a 查看本機(jī)上的所有容器 2 導(dǎo)出鏡像 使用 docker export 命令根據(jù)容器 id 將鏡像導(dǎo)成一個(gè)文件 上面命令執(zhí)行之后,我們便可以通過 ls 命令在當(dāng)前目錄下發(fā)現(xiàn) image.tar 3 導(dǎo)入鏡像 使用 docker import 命令將這個(gè)鏡像導(dǎo)

    2024年02月03日
    瀏覽(22)
  • Docker容器------鏡像,容器基礎(chǔ)命令

    Docker容器------鏡像,容器基礎(chǔ)命令

    目錄 ?一,docker鏡像 ?1,查看docker版本 ?2,獲取鏡像 2.1查看下載到本地的所有鏡像? ?2.2 獲取鏡像信息 2.3 添加鏡像標(biāo)簽(上傳鏡像到倉庫)? ?2.4 鏡像導(dǎo)出 ?2.5 鏡像導(dǎo)入 ?2.6 ,刪除鏡像 ?2.7 上傳鏡像 ?編輯?二,docker 容器操作 1,查看容器 2,容器創(chuàng)建----docker create ?

    2024年02月05日
    瀏覽(31)
  • 【Docker系列】容器基礎(chǔ)、Docker鏡像管理

    個(gè)人名片: 對人間的熱愛與歌頌,可抵歲月冗長?? Github???????:念舒_C.ying CSDN主頁??:念舒_C.ying 個(gè)人博客?? :念舒_C.ying 2.1 Docker鏡像查找 命令查找 docker官網(wǎng)查找 2.2 Docker鏡像管理 拉取MySQL鏡像 查看本地鏡像 鏡像加速(阿里云) Daocloud鏡像站加速 鏡像刪除 2.3 容器

    2024年01月25日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包