docker/docker-compose經常使用命令與配置

今天整理了些之前使用docker時經常使用的命令與配置,在這裏分享出來,也便於本身往後查閱。文中不包括docker的基本概念、安裝,還請自行搜尋。
各位感興趣的話,能夠自存一份,若要轉載,記得標明出處哦。node

docker

1、docker基礎操做
service docker start/stop/restart

2、鏡像基礎操做


1.搜索鏡像:

docker search imageName

2.拉取搜索出的鏡像:

docker pull 鏡像名;

3.修改鏡像名

docker tag 舊鏡像名:tag 新鏡像名:tag

4.查看當前鏡像列表:

docker images

5.刪除鏡像

docker rmi imageName

3、容器基礎操做(對已經啓動的鏡像操做)


--1.顯示全部容器

docker ps -a


--2.顯示當前運行中的容器

docker ps


--3.啓動容器

docker start containerId


--4.中止容器

docker stop containerId


--5.重啓容器

docker restart containerId


--6.刪除容器

docker rm containerId

4、從無到有構建一個新的鏡像(基於已有鏡像,建立一個新的鏡像),並啓動


1.隨意建立一個文件夾;
2.建立Dockerfile文件(名字只能爲 Dockerfile),內容以下:

#鏡像來源
FROM centos:latest

#做者
MAINTAINER "chengxp"

#在新建立的鏡像中建立目錄
RUN mkdir /usr/local/jdk
RUN mkdir /usr/local/runentry

#添加當前鏡像中須要依賴的工具
ADD jdk1.8.0_65.tar /usr/local/jdk/
ADD jboss.tar /usr/local/runentry/

#卷,會將鏡像中的目錄掛載到宿主機的docker安裝目錄下
VOLUME ["/usr/local/runentry/jboss/logs"]

#環境變量添加
ENV JAVA_HOME /usr/local/jdk1.8.0_65
ENV PATH $PATH:$JAVA_HOME/bin

#提示要輸出的端口(沒有實際意義)
EXPOSE 8181

#鏡像啓動成容器須要執行的命令(軟件啓動指令)
CMD ["./usr/local/runentry/jboss/bin/run.sh","-c","all"]

3.執行Dockerfile,在當前目錄(Dockerfile文件所在目錄)執行:
docker build -t 自定義鏡像名稱:tag(版本號) .("."表明當前目錄執行)

4.鏡像被成功建立。

5.運行鏡像→生成容器
docker run -d(後臺運行) -p 8888:8181(指定外部8888端口映射出內部的8080端口) --name 容器名(指定容器運行的名稱) 鏡像名:tag(版本號)
        
備註:運行基礎的centos鏡像,由於沒有啓動指令,因此須要額外增長命令參數
docker run -dit 鏡像名 /bin/bash

5、清理無效鏡像與容器

△刪除<none>的鏡像
docker rmi $(docker images | grep "none" | awk '{print $3}')

△刪除無用容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`

6、宿主機與容器交互


1.進入宿主機

docker exec -it 容器ID /bin/bash

2.文件拷貝


1)從主機到容器:

docker cp 文件 容器ID:容器中的路徑(路徑必須提早建立)


2)從容器到主機:

docker cp 容器ID:容器中的路徑 主機上文件的路徑

 

7、卷(容器與宿主機文件同步)


--1.查看全部卷

docker volume ls


--2.查看容器卷詳細信息:

docker inspect containerId 


--3.建立卷

docker volume create my-vol


--4.建立容器時指定卷

docker run -v 主機路徑:容器中路徑


--5.刪除容器時,連同卷一塊兒刪除

docker rm -v 容器id


--6.清理全部無用卷

docker volume prune

--7.dockerfile中建立鏡像指定卷


VOLUEME ["/data1","/data2"]
以上,會在運行後的容器中的根目錄中,分別建立 兩個目錄;mysql

△缺點:以這種方式建立的卷,不能指定主機目錄。而對應的目錄默認是docker安裝時指定的目錄:/var/lib/docker/volumes/;
可經過docker inspect containerId 查看對應的自動生成的主機目錄; 
sql


8、容器備份(實質上應導出鏡像進行轉移)

第一種方式(導出容器)【不推薦】:


使用命令:docker export/import 相關進行操做;
缺點:
不能保留運行時相關信息,如把war包存放到tomcat,導出時,war包會被遺棄;docker

第二種方式(導出成鏡像)【推薦】:

步驟:


1.導出:


1)提交當前容器狀態,並根據當前容器 生成一個新的鏡像:centos

docker commit 容器id 新建立的鏡像名稱tomcat

2)將新建立的鏡像導出成tar:
docker save 新建立的鏡像名稱 > 鏡像名稱.tarbash

2.導入:
docker load < 鏡像名稱.tar

△查看容器運行日誌

docker logs -f -t --tail 顯示最後多少行 容器id

 

docker-comepose(用於啓動N個鏡像,一個項目中所須要用到的軟件)


1、在任意文件夾下建立一個docker-compose.yaml文件,內容以下:

version: "3"
services:
    back-app:
        #1.鏡像來源:根據指定鏡像啓動(二選一)
        image: 25.30.9.228:5000/back-app:v1.1.0
        #2.鏡像來源:根據指定的Dockerfile所在目錄來啓動(二選一)
        build: /home/start-entry/back-app(絕對路徑)
        build: ./back-app (相對當前目錄路徑)
        #若同時配置了image和build,那麼將經過build建立一個 名爲image配置的鏡像
        
        
        #自定義啓動後的鏡像名稱
        container-name: back-app-container
        #宿主機目錄與容器目錄映射
        volumes:
          #1.宿主機絕對路徑目錄:容器中絕對路徑目錄
          - /home/back-app/logs:/home/logs   
          #2.默認在容器內部建立一個數據卷,指向宿主機匿名位置[不推薦]
          - /home/logs
        #執行時,重啓當前服務
        restart: always
        #啓動映射端口:外部:內部
        ports:
          - "8181:8181"
        #將主機名寫入到容器中的hosts文件
        extra_hosts:
          - "master:192.168.1.1"
          - "node1:192.168.1.2"
          - "node2:192.168.1.3"
        #當前鏡像啓動以前,必須等待如下服務啓動完畢以後才能啓動
        #depends_on:
           - mysql
           - kafka
        
    mysql:
        build: ./mysql
        ports:
          - "3306:3306"
    kafka:
        build: /home/start-entry/kafka
        ports:
          - "8787:8787"


2、啓動docker-compose:

docker-compose up -d(後臺運行)

3、相應軟件啓動成功,可經過docker ps查看。

4、中止docker-compose,並刪除對應啓動的容器:

docker-compose down

本文中記錄的只是我的常常用到的操做,需獲取更多配置,請移步官網:https://docs.docker.com/engine/reference/builder/。app

相關文章
相關標籤/搜索