docker使用

docker的使用

dockerfile編寫

目的

在docker中安裝java環境,并部署tomcat。使tomcat的webapps目錄映射到宿主機中。并且在tomcat中部署java web服務,使用docker容器啟動 java web直接啟動。

dockfile編寫

#基于的基礎鏡像
FROM centos:7
#指明鏡像維護者信息
MAINTAINER shuaidong@126.com
#COPY jdk and tomcat into image
#在docker中創建一個文件
RUN mkdir /app
RUN touch /etc/test
#將一串文字輸出到/etc/test文件中,注意這里必須在前面加上/bin/bash -c ,后面命令用‘’單引號擴起來不然會報錯
RUN  /bin/bash -c 'echo "10.205.133.127   master" >> /etc/test'
RUN   /bin/bash -c 'echo "10.205.108.47    slave01" >> /etc/test'
RUN   /bin/bash -c 'echo "10.205.107.51    slave02" >> /etc/test'
RUN   /bin/bash -c 'echo "10.205.108.165   slave03" >> /etc/test'
#創建一個掛載點,從容器到宿主機
VOLUME ["/app/apache-tomcat-8.5.20/webapps"]
#將宿主機的apache-tomcat-8.5.20復制到鏡像到/app/下
ADD apache-tomcat-8.5.20 /app/apache-tomcat-8.5.20
ADD jdk-8u131-linux-x64.rpm /app/jdk-8u131-linux-x64.rpm
ADD Service.war /app/apache-tomcat-8.5.20/webapps/Service.war
RUN rpm -ivh /app/jdk-8u131-linux-x64.rpm
#設置環境變量
ENV CATALINA_HOME /app/apache-tomcat-8.5.20
ENV PATH $PATH:$CATALINA_HOME/bin
#暴露對外的服務端口
EXPOSE 8080
#同CMD命令,但不會被docker run提供的參數覆蓋。
ENTRYPOINT ["/app/apache-tomcat-8.5.20/bin/catalina.sh","run"]

創建鏡像命令

使用當前目錄的dockfile創建一個鏡像,鏡像名為webapp

docker build -t webapp .

運行一個容器,并添加hosts

給容器添加hosts,注意給容器添加hosts,沒有辦法在鏡像中直接使用RUN 命令修改/etc/hosts中的文件。因為這樣雖然修改鏡像中/etc/hosts.而鏡像在創建成容器的時候,容器的ip改變了,其中的hosts文件也會發生改變。所以就算這樣做了,也是沒有效果的。
解決辦法:我們在運行容器的時候給起添加一個hosts

docker  run --privileged -itd --name deviceauthservice --add-host master:172.16.88.179 --add-host slave01:172.16.88.64 --add-host slave01:172.16.88.62 --add-host slave01:172.16.88.173  -p 9999:8080 a9147221c42d

服務啟動了,常用命令維護容器中的服務

  1. 查看容器中的logs

      docker logs -f 容器id
    
  2. 查看容器中映射在宿主機中的目錄對應關系

    docker inspect -f "{{.Volumes}}"  容器id
    
    

3.也可以將容器中的logs日志文件映射到宿主機上進行查看,通過在運行容器時指定

 ```
 docker run -v /home/syx/logs:/logs ubuntu 
 
 ```
 
 命令解釋:將宿主機的目錄/home/syx/logs映射到容器的/logs目錄下。這個指定宿主機目錄掛在到容器上是dockerfile做不到的。

dockerfile的命令

FROM

基于哪個鏡像

RUN

安裝軟件用

MAINTAINER

鏡像創建者

CMD

Container啟動時執行的命令,但是一個Dockerfile中只能有一條CMD命令,多條則只執行最后一條CMD.

ENTRYPOINT

container啟動時執行的命令,但是一個Dockerfile中只能有一條ENTRYPOINT命令,如果多條,則只執行最后一條
cmd和ENTRYPOINT區別: ENTRYPOINT可以在運行容器的時候才指定運行命令的參數

例子

使用下面的ENTRYPOINT構造鏡像:
ENTRYPOINT ["/bin/echo"]
那么docker build出來的鏡像以后的容器功能就像一個/bin/echo程序:
比如我build出來的鏡像名稱叫imageecho,那么我可以這樣用它:
docker run -it imageecho “this is a test”
這里就會輸出”this is a test”這串字符,而這個imageecho鏡像對應的容器表現出來的功能就像一個echo程序一樣。 你添加的參數“this is a test”會添加到ENTRYPOINT后面。

USER

使用哪個用戶跑container

EXPOSE

container內部服務開啟的端口。主機上要用還得在啟動container時,做host-container的端口映射:

docker run -d -p 127.0.0.1:33301:22 centos6-ssh
命令解釋:container ssh服務的22端口被映射到主機的33301端口

ENV

用來設置環境變量,比如:
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

ADD

將文件<src>拷貝到container的文件系統對應的路徑<dest>
所有拷貝到container中的文件和文件夾權限為0755,uid和gid為0

  • 如果要ADD本地文件,則本地文件必須在 docker build <PATH>,指定的<PATH>目錄下
  • 如果要ADD遠程文件,則遠程文件必須在 docker build <PATH>,指定的<PATH>目錄下。
    比如docker build github.com/creack/docker-firefox

VOLUME

可以將本地文件夾或者其他container的文件夾掛載到container中。
但是還有另一件只有-v參數能夠做到而Dockerfile是做不到的事情就是在容器上掛載指定的主機目錄.例如:
docker run -v /home/syx/dockerfile:/data ubun

WORKDIR

切換目錄用,可以多次切換(相當于cd命令),對RUN,CMD,ENTRYPOINT生效

docker build

-f Dockerfile的完整路徑
-t 鏡像的名字及tag,通常name:tag或者name格式;可以在一次構建中為一個鏡像設置多個tag
例如:使用URL github.com/creack/docker-firefox 的 Dockerfile 創建鏡像。
docker build github.com/creack/docker-firefox
使用當前目錄的Dockerfile創建鏡像。
docker build -t runoob/ubuntu:v1 .
使用指定目錄/app下dockerfile創建鏡像名為webapp鏡像,dockerfile中用的資源路經在當前目錄下
docker build -f /app -t webapp .

docker鏡像以及數據位置

Docker的鏡像以及一些數據都是在/var/lib/docker目錄下

docker創建橋接子網

sudo docker network create --driver bridge --subnet 172.25.0.0/16 device-bri

運行容器時給容器指定ip地址

sudo docker run -itd --name test3 --ip=172.25.0.100 --network=device 3db94df3e006

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,524評論 0 120
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,787評論 0 7
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,795評論 1 21