通過docker鏡像, docker可以在服務器上運行包含項目所需運行環境的docker容器, 在線倉庫里有很多各個軟件公司官方發布的鏡像, 或者第三方的鏡像. 如果我們需要使用docker把我們的應用程序打包成鏡像, 別的機器上只要安裝了docker, 就可以直接運行鏡像, 而不需要再安裝應用程序所需要的環境(比如 jre)了.
定制自己的鏡像:
更新已有的鏡像,再構建新的自定義鏡像.
1. 使用docker pull 鏡像名:版本
從在線docker倉庫中拉取一個鏡像
docker pull ubuntu:18.04
使用docker images
可以看到你的鏡像: (默認路徑: /var/lib/docker/containers)
root@iZbp13tcf8gaqn21r6m8viZ:/var/lib/docker/containers# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lifetrack 1.0 881e666fc6b3 21 minutes ago 1.49GB
ubuntu_jdk 1.0 42d9398e7f50 40 minutes ago 1.46GB
ubuntu 18.04 8e4ce0a6ce69 3 weeks ago 64.2MB
star7th/showdoc latest e169aaaa88e2 3 months ago 389MB
各個選項說明:
-
REPOSITORY:表示鏡像的倉庫源
-
TAG:鏡像的標簽
-
IMAGE ID:鏡像ID
-
CREATED:鏡像創建時間
-
SIZE:鏡像大小
2.使用docker run -t -i -d 鏡像名:版本 /bin/bash
來根據鏡像運行一個容器</u>
參數說明:
-
-i: 交互式操作。
-
-t: 終端。
-
-d:在后台運行(加了這個 -i -t就沒用了)
-
ubuntu:15.10: 這是指用 ubuntu 15.10 版本鏡像為基礎來啟動容器。
-
/bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。
如果在后台運行容器, 想進入容器有兩種方法:
1. docker attach 容器ID : 退出時(exit)會停止容器
-
docker exec -it 容器ID /bin/bash :退出時(exit)不會停止容器, 一般用這個
-
3. 修改容器
進入這個ubuntu容器后, 你可以自己安裝你的應用所需要的運行環境, 比如我要安裝
mysql: sudo apt-get install mysql
JDK: sudo apt-get install openjdk-8-jdk
以上在容器內操作, 退出輸入: exit
4. 將容器提交為一個新鏡像:
docker commit -m="has update" -a="qds" 容器ID 鏡像名:版本號
5. 用包含運行環境的新鏡像, 打包我們的應用程序為docker鏡像
把我們的java程序的jar包, 放在一個新建空文件夾, 然后新建一個Dockerfile文件
編輯Docerfile文件:
FROM 鏡像名:版本號
MAINTAINER 作者簽名
RUN 打包時運行的linux命令
COPY [--chown=<user>:<group>] <源路徑1>... <目標路徑>
CMD nohup java -jar xxxx.jar > xxx.log 2>&1 &```
FROM:定制的鏡像都是基於 FROM 的鏡像,這里的 nginx 就是定制需要的基礎鏡像。后續的操作都是基於 nginx。
RUN:用於執行后面跟着的命令行命令。有以下倆種格式:
shell 格式:
RUN <命令行命令>
# <命令行命令> 等同於,在終端操作的 shell 命令。
exec 格式:
RUN ["可執行文件", "參數1", "參數2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline
COPY: 復制指令,從上下文目錄中復制文件或者目錄到容器里指定路徑。
CMD: 類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:
CMD 在docker run 時運行。
RUN 是在 docker build。
作用:為啟動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。
注意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最后一個生效。
6. 根據Dockerfile文件構建包含應用程序的新鏡像:
docker build -t runoob/centos:6.7 .
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
參數說明:
-
-t :指定要創建的目標鏡像名
-
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑