日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker学习笔记(二)创建自己的镜像

發布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker学习笔记(二)创建自己的镜像 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

image與container的可讀寫性

創建自己的鏡像

dockerfile語法

創建自己的springboot項目image(Dockerfile方式)

推送鏡像到鏡像倉庫(阿里云)

通過Container生成Image


image與container的可讀寫性

An?image?is a read-only template with instructions for creating a Docker container. Often, an image is?based on?another image, with some additional customization.

鏡像(Image)就是一堆只讀層(read-only layer)的統一視角?,可以由一個個基礎的鏡像layer組成

?

?

而容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。

?

Container = Image(只讀曾)?+ 可讀層

docker create <image-id> 通過鏡像image創建一個container,就是為指定的鏡像(image)添加了一個可讀寫層,組成了一個新的容器(此時容器還沒有運行)

docker start <container-id>?為容器創建了一個隔離的進程空間,使得容器在其中獨立地運行

而docker run <image-id> 相當于 docker create + docker start?

創建自己的鏡像

官方一般通過一個dockerfile來生成對應的image鏡像,可以參照dockerfile的命令制作自己的鏡像文件

dockerfile語法

1 FROM

指定基礎鏡像

Docker會逐條運行Dockerfile中的指令,第一條指令必須為FROM指令,如果在同一個Dockerfile中需要創建多個鏡像時,可以使用多個FROM指令

FROM ubuntu:14.04

2 RUN

在鏡像內部執行一些命令,比如安裝軟件,配置環境等,換行可以使用""

RUN groupadd -r mysql && useradd -r -g mysql mysql

3 ENV

設置變量的值,ENV? MYSQL_MAJOR 5.7,可以通過docker run --e key=value修改,后面可以直接使用${MYSQL_MAJOR}

ENV MYSQL_MAJOR 5.7

4 LABEL

設置鏡像標簽

LABEL email="chenpp@163.com" LABEL name="chenpp"

5 VOLUME

指定數據的掛載目錄,一般用來存放數據庫和需要持久化的數據等

VOLUME /var/lib/mysql

5 COPY

將主機的文件復制到鏡像內,如果目錄不存在,會自動創建所需要的目錄(只是復制,不會提取和解壓)

COPY docker-entrypoint.sh /usr/local/bin/

6 ADD

將主機的文件復制到鏡像內,和COPY類似,同時會對壓縮文件提取和解壓

ADD application.yml /etc/itcrazy2016/

7 WORKDIR

指定鏡像的工作目錄,之后的命令都是基于此目錄工作,若不存在則創建

在/usr/local/tomcat下創建test.txt文件

WORKDIR /usr/local WORKDIR tomcat RUN touch test.txt

在/root/test下多出一個app.yml文件

WORKDIR /root ADD app.yml test

8 CMD

啟動容器時執行的命令,每個Dockerfile 只能有一條CMD命令。如果指定了多條命令,只有最后一條會被執行。如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉CMD指定的命令。

CMD ["mysqld"] 或 CMD mysqld

9 ENTRYPOINT

配置容器啟動后執行的命令,并且不可被docker run提供的參數覆蓋。每個Dockerfile中只能有一個ENTRYPOINT,當指定多個時,只有最后一個起效。

ENTRYPOINT ["docker-entrypoint.sh"]

10 EXPOSE

指定鏡像要暴露的端口,啟動鏡像時,可以使用-p參數將該端口映射給宿主機

EXPOSE 3306

?

創建自己的springboot項目image(Dockerfile方式)

1.通過mvn clean package 在target下打成包dockerfile-demo-0.0.1-SNAPSHOT.jar

2.創建springboot-dockerfile目錄
? ?[root@10 ~]# mkdir /opt/springboot-dockerfile

3.上傳jar包到該目錄下,并且在此目錄創建Dockerfile

4.創建Dockerfile文件

FROM openjdk:8 ? ?MAINTAINER chenppLABEL name="springboot-dockerfile" version="1.0" author="chenpp" ? ?COPY dockerfile-demo-0.0.1-SNAPSHOT.jar springboot-dockerfile-image.jar ? CMD ["java","-jar","springboot-dockerfile-image.jar"]

5.基于Dockerfile構建鏡像 ?

##注意最后的"." 表示以當前目錄下的Dockerfile構建鏡像 [root@10 springboot-dockerfile]# docker build -t springboot-docker-image .

6. 基于image創建container ? ?
???docker run -d --name boot01 -p 8180:8080 ?springboot-docker-image

7. 訪問映射的ip地址: 成功

?

推送鏡像到鏡像倉庫(阿里云)

1.登錄自己的阿里云,創建鏡像倉庫(注意namespace和密碼)

2. 登錄阿里云賬號,tag 創建的image并推送到阿里云鏡像庫

#登錄阿里云的鏡像倉庫,然后將當前的image 標記成對應的格式 :阿里云地址/命名空間/image [root@10 springboot-dockerfile]# sudo docker login --username=dearfulan registry.cn-shenzhen.aliyuncs.com[root@10 springboot-dockerfile]# docker tag springboot-docker-image registry.cn-shenzhen.aliyuncs.com/chenpp/springboot-image:v2.0[root@10 springboot-dockerfile]# docker push registry.cn-shenzhen.aliyuncs.com/chenpp/springboot-image:v2.0

3.下載并創建container運行

[root@10 springboot-dockerfile]#docker pull registry.cn-shenzhen.aliyuncs.com/chenpp/springboot-image:v2.0 [root@10 springboot-dockerfile]#docker run -d --name boot02 -p 8280:8080?registry.cn-shenzhen.aliyuncs.com/chenpp/springboot-image:v2.0

成功訪問:

?

?

?

?

?

通過Container生成Image

前面說了container是可讀寫的,相當于在image上加了一層讀寫層,那么去掉這層讀寫層,就又變成了一個只讀層

所以除了使用Dockerfile生成image,還可以將當前的container生成新的image以供使用(不過官方推薦使用Dockerfile的方式來生成鏡像)

1.拉取一個基礎鏡像
??docker pull centos
2.根據centos鏡像創建出一個container ? ?
??docker run -d -it --name my-centos centos ? ?
3.進入my-centos容器中 ? ?
??docker exec -it my-centos bash ? ?
4.輸入vim命令 ? ?
??bash: vim: command not found? ?

?對該container進行修改,也就是安裝一下vim命令,然后將其生成一個新的centos

5.在centos的container中安裝vim ? ?
??yum install -y vim? ?
6.退出容器,將其生成一個新的centos image ---"vim-centos-image" ? ?
? docker commit my-centos vim-centos-image? ?
7.基于"vim-centos-image"創建新的容器 ? ?
??docker run -d -it --name my-vim-centos vim-centos-image? ?
8.進入到my-vim-centos容器中,檢查vim命令是否存在 ? ?
??docker exec -it my-vim-centos bash ? ?
??vim?

?

?

參考:

https://www.cnblogs.com/bethal/p/5942369.html
?

總結

以上是生活随笔為你收集整理的docker学习笔记(二)创建自己的镜像的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。