×

docker制作鏡像方法是怎樣的?docker研發(fā)日常制作鏡像操作是怎樣的?

分類:虛機資訊 編輯:IT觀察 瀏覽量:169
2021-04-20 10:48:58
  docker包含了三個概念,分別是鏡像,倉庫和容器,其中鏡像是docker運行容器的一個重要的前提,更是docker的核心,倉庫就是存放鏡像的地方。docker鏡像就好像是一個特殊的文件系統(tǒng),它除了提供容器運行的程序,資源,配置和庫等的文件之外,還包括了一些需要的配置參數(shù),那么docker制作鏡像方法是怎樣的?docker研發(fā)日常制作鏡像操作是怎樣的呢?下面新網(wǎng)就給朋友們詳細的來說明一下這些問題。
  docker制作鏡像方法是怎樣的?
  docker制作鏡像一般有2種方法:
  使用hub倉庫中已有的環(huán)境,安裝自己使用的軟件環(huán)境后完成image創(chuàng)建。
  通過Dockerfile,完成鏡像image的創(chuàng)建。
  第一種:使用hub倉庫中已有的環(huán)境,安裝自己使用的軟件環(huán)境后完成image創(chuàng)建。
  制作自己的Docker鏡像環(huán)境,里面包括:
  (1)centos
  (2)golang
  1、docker pull centos(pull最新的centos系統(tǒng))
  2、docker run -it centos /bin/bash(運行進入容器)
  3、在centos環(huán)境中創(chuàng)建work用戶
  [root@132aaafe685d /]# useradd work
  [root@132aaafe685d /]# su - work
 
docker制作鏡像
  4、下載go的Linux安裝包,解壓,配置環(huán)境變量
  [work@132aaafe685d ~]$ mkdir goapp && cd goapp && wget https://studygolang.com/dl/golang/go1.14.1.linux-amd64.tar.gz
  [work@132aaafe685d goapp]$ tar zxvf go1.14.1.linux-amd64.tar.gz
  [work@132aaafe685d goapp]$ vim ~/.bash_profile
  [work@132aaafe685d go]$ source ~/.bash_profile
  [work@132aaafe685d go]$ go version
  go version go1.14.1 linux/amd64
  [work@132aaafe685d go]$ echo $GOPATH
  /home/work/goapp
  [work@132aaafe685d go]$ echo $HOME
  此時,go的最基礎(chǔ)環(huán)境就算配置好了,讓我們寫一個go程序,運行一下吧。
  5、go 實現(xiàn)"Hello World!"
  [work@132aaafe685d ~]$ vim /home/work/goapp/src/main.go
  6、go run main.go
  [work@132aaafe685d ~]$ go run /home/work/goapp/src/main.go
  Hello World!
  7、docker commit -m "xxx" -a "authorName" containerID hub的名稱/鏡像名稱:tag
  8、docker commit && push到遠端倉
  C:\Users\Administrator>docker commit -m "centos and go env" -a "wenhan" 132aaafe685d zhangwenhan/gobox:v1
  sha256:2f74c2d19210cc38da7267e5e8922dbafc1f33d9bf26ff01b27f335d9e6e8dec
  C:\Users\Administrator>docker login
  Authenticating with existing credentials...
  Login Succeeded
  9、查看https://hub.docker.com/里的個人倉,push的image已入庫
  10、如果要打包報錯到本地
  docker save -o D:\DockerDesktop\vm-data\DockerDesktop\ebox\sunny_gobox.tar zhangwenhan/gobox:v1.0
  第二種:通過Dockerfile,完成鏡像image的創(chuàng)建。
  1、創(chuàng)建鏡像所在文件夾+Dockerfile文件
  (1)mkdir ebox && cd ebox
  (2)touch Dockerfile
  2、在Dockerfile文件中寫入指令
  FROM ubuntu
  RUN apt-get update && apt-get install -y ruby ruby-dev
  格式說明:
  每行命令都是以 INSTRUCTION statement 形式,就是命令+ 清單的模式。命令要大寫,“#”是注解。
  FROM 命令是告訴docker 我們的鏡像什么。
  RUN 命令是在鏡像內(nèi)部執(zhí)行。就是說他后面的命令應該是針對鏡像可以運行的命令。
  3、創(chuàng)建鏡像
  命令:docker build -t zhangwenhan/ebox:v2 .
  docker build 是docker創(chuàng)建鏡像的命令
  -t 是標識新建的鏡像屬于 zhangwenhan的
  ebox是倉庫的名稱
  :v2 是tag
  "."是用來指明 我們的使用的Dockerfile文件當前目錄的
  4、創(chuàng)建完成后,從鏡像創(chuàng)建容器
  docker run -t -i zhangwenhan/ebox:v2 /bin/bash
  Docker研發(fā)日常制作鏡像操作
  一、編寫NginxDemo Dockerfile
  # Version 0.1
  # 基礎(chǔ)鏡像
  FROM nginx
  # 維護者信息
  MAINTAINER Mr.Hao@51hsw.com
  # 將容器的工作目錄設(shè)置為/app(當前目錄,如果/app不存在,WORKDIR會創(chuàng)建/app文件夾)
  WORKDIR /app
  # 鏡像操作命令
  RUN xxxx
  # 容器啟動命令
  #指定nginx配置項目,--from=builder 指的是從上一次 build 的結(jié)果中提取了編譯結(jié)果(FROM node:alpine as builder),即是把剛剛打包生成的dist放進nginx中
  COPY --from=builder app/nginx.conf /etc/nginx/nginx.conf
  #暴露容器80端口
  EXPOSE 80
  二、編譯、安裝日常操作
  編譯
  # xx項目 1.0 tag(標簽或版本)
  docker build -t xx:1.0
  查看
  #待上面命令執(zhí)行完成
  docker images |grep xx
  #查看全部鏡像
  docker images
  運行
  #使用xx-project進行運行 8080:本機使用訪問的端口 80:Docker內(nèi)啟動的端口 xx-project-docker:指定啟動之后容器名稱 xx-project:1.0 鏡像名稱(由上面命令獲得或者第一個命令 -t 的參數(shù)值)
  docker run -p 8080:80 -d --name xx-project-docker xx-project:1.0
  打包為tar
  docker save -o xx-project.tar xx-project:1.0
  加載tar包到其它docker環(huán)境
  #執(zhí)行l(wèi)oad,將.tar壓縮文件加載到線上鏡像
  docker load --input /home/root/xx-project.tar
  推送docker鏡像到harbor
  #初始
  docker tag xx-project:1.0 core.harbor.domain:5000/xx-project/xx-project:1.0
  #推送
  docker push core.harbor.domain:5000/xx-project/xx-project:1.0
 
docker制作鏡像
  三、停止、刪除相關(guān)操作
  查看所有運行的容器
  #列出所有的容器 ID
  docker ps -aq
  #列表進程
  docker ps -a
  殺掉某個容器
  #kill 指定容器
  docker kill 容器ID 容器ID 容器ID ...
  #stop 指定容器
  docker stop 容器ID 容器ID 容器ID ...
  #停止所有容器
  docker stop $(docker ps -aq)
  刪除容器
  #刪除指定容器
  docker rm 容器ID
  #強刪除
  docker rm -f 容器ID
  #刪除所有容器
  docker rm $(docker ps -aq)
  #強刪除所有容器
  docker rm -f $(docker ps -aq)
  刪除鏡像
  #查詢所有鏡像
  docker images
  #刪除指定鏡像
  docker rmi 鏡像ID
  #強刪除
  docker rmi -f 鏡像ID
  #刪除所有鏡像
  docker rmi $(docker images -q)
  #強刪除所有鏡像
  docker rmi -f $(docker images -q)
  其它清空快捷操作
  # 清空所有不使用的鏡像
  docker image prune --force --all
  # 或
  docker image prune -f -a
  # 清空所有停止的容器
  docker container prune -f
  awk刪除操作
  #停止容器
  docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
  #刪除容器
  docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')
  #刪除鏡像
  docker rmi $(docker images | grep "none" | awk '{print $3}')
  管理image鏡像難嗎? 需要哪些依賴?
  管理image鏡像難嗎?
  docker cli提供了豐富的api接口, 可以非常方便地操作image鏡像。
  需要哪些依賴?
  安裝docker的系統(tǒng)(Windows或者Linux)。
  一旦容器從鏡像啟動后,二者之間就變成了互相依賴的關(guān)系,并且在鏡像上啟動的容器全部停止之前,鏡像是無法被刪除的。嘗試刪除鏡像而不停止或銷毀使用它的容器,會導致出錯。
  docker制作鏡像方法是怎樣的?大家在使用docker制作鏡像的時候,就可以按照上面的步驟去操作,這個步驟有些復雜,需要一點點的去理解和操作,對于docker研發(fā)日常制作鏡像操作方法,我們也可以去了解一下,如果大家還有什么不明白的問題,都可以咨詢新網(wǎng)的專業(yè)工作人員。


聲明:免責聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認相關(guān)法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)

送郵件至:operations@xinnet.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時

需注明出處:新網(wǎng)idc知識百科

免費咨詢獲取折扣

Loading