Docker基礎篇

 

基礎命令: 

# docker 基礎命令記錄

查詢鏡像: docker search 鏡像名

運行容器: docker start "容器id"

運行容器交互模式: docker run -it "容器id/容器名"

退出不停止容器: ctrl+p+q

退出並停止容器: exit/ctrl+d

停止正在運行的容器: docker kill 容器ID

停止正在運行的容器: docker stop 容器ID

刪除已經停止的容器: docker rm "容器ID"

刪除未停止的容器: docker rm -f "容器ID"

一次性刪除多個容器: docker rm -f $(docker ps -a -q)

一次性刪除多個容器: docker ps -a -q | xargs docker rm

後臺守護進程啓動: docker run -d 容器名

後臺守護進程啓動並添加日誌在docker ps 可以查看進程狀態: docker run -d centos /bin/sh -c "while true; do echo hello suny;sleep 2;done"

查看docker進程運行日誌: docker logs -t -f --tail 3 容器ID

查看容器內運行的進程: docker top 容器ID

查看容器內部細節: docker inspect 容器ID

進入未停止的容器: docker attach 容器ID

進入未停止的容器: docker exec -it 容器ID /bin/bash

不進入未停止的容器進行操作: docker exec -it 容器ID ls -l /tmp

從容器內拷文件到主機: docker cp 容器ID:/tmp/yum.log ./

Docker運行tomcat鏡像並帶端口映射: docker run -it -p 8008:8080 tomcat

Docker隨機分配端口映射運行鏡像: docker run -it -P tomcat

提交容器副本做成新的鏡像: docker commit -a="suny" -m="delete tomcat docs" 容器ID suny/tomcat:1.2

Docker容器數據卷:

主要功能:
1. Docker數據持久化
2. 容器間繼承+共享數據

執行命令:
命令一: 無權限
docker run -it -v /宿主機的絕對路徑目錄:/容器內目錄 --privileged=true 鏡像名
命令二: 容器內增加只讀權限
docker run -it -v /宿主機的絕對路徑目錄:/容器內目錄:ro 鏡像名

# 防止訪問docker容器掛在的共享目錄出現無權限進入問題: 增加 --privileged=true

DockerFile: 類似鏡像文件的代碼描述

一、DockerFile數據卷基礎測試: 

步驟一: 編寫可執行的dockerfile腳本 /dockerfile/Dockerfile

# volume test
FROM centos

VOLUME ["/dataVolume1", /dataVolume2]

CMD echo "finished, ------ success1"

CMD /bin/bash

步驟二: 執行build

docker build -f ./Dockerfile -t suny/centos0425

注意:  dockerfile文件不指定宿主機共享目錄則訪問宿主機的/var/lib/docker/volumes/*目錄

 

DockerFile數據卷容器:

容器間傳遞共享數據:   --volumes-from

docker run -it --name dc01 鏡像名
docker run -it --name dc02 --volume-from dc01 鏡像名
docker run -it --name dc03 --volume-from dc01 鏡像名

注意:  容器之間配置信息的傳遞, 數據卷的生命週期一直持續到沒有容器使用它爲止

 

DockerFile解析過程: 

  • 每條保留指令必須大寫,且後面必須跟隨至少一個參數
  • 指令按照從上到下,順序執行
  • "#"號表示註釋
  • 每條指令都會創建一個新的鏡像層,並對鏡像進行提交

 

Docker執行DockerFile的大致流程:

  • docker從基礎鏡像運行一個容器
  • 執行一條指令並對容器做出修改
  • 執行類似docker commit的操作提交一個新的鏡像層
  • docker再基於剛提交的鏡像運行一個新容器
  • 執行dockerfile中的下一條指令直到所有指令都執行完成

 

DockerFile文件總結: 

  • Dockerfile是軟件的原材料
  • Docker鏡像是軟件的交付品
  • Docker容器可以認爲軟件運行的狀態
  • Dockerfile面向開發
  • Docker鏡像成爲交付標準
  • Docker容器則涉及部署與運維、三者缺一不可,合力充當Docker體系的基石

 

DockerFile保留字指令: 

FROM: 基礎鏡像,當前鏡像基於那個鏡像
MAINTAINER: 作者,作者郵箱
RUN: 容器構建時需要運行的命令
EXPOSE: 當前容器對外暴露的端口號
WORKDIR: 指定在創建容器後,終端默認登錄進來的工作目錄
ENV: 用來構建鏡像過程中設置環境變量
ADD: 拷貝文件到鏡像且自動解壓
COPY: 拷貝文件到鏡像, copy ["原路徑", "鏡像內目標路徑"]
VOLUME: 容器數據卷, 用於數據保存和持久化工作
CMD: 指定一個容器啓動時要運行的命令, DockerFile中可以運行多個CMD命令,但只有最後一個生效,CMD會被docker run 之後的參數替換
ENTRYPOINT: 指定一個容器啓動時要運行的命令,多個entrypoint命令會變成追加而不是覆蓋
ONBUILD: 當構建一個被繼承的DockerFile是運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發

 

案例一: centos鏡像安裝vim及net-tools

注意: 前提本地已經拉取過centos鏡像

  • 第一步: 創建文件Dockerfile
FROM centos
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 8090
CMD /bin/bash

 

  • 第二步: build出新鏡像
docker build -f Dockerfile2 -t mycentos:1.3 .

 

  • 第三步: 運行新鏡像
docker run -it 鏡像ID

 

  • 第四步: 查看鏡像變更歷史
docker history 鏡像ID

 

案例二: centos鏡像安裝tomcat,jdk1.8

  • 第一步: 創建Dockerfile文件
FROM centos
MAINTAINER [email protected]
#把宿主機當前上下問的c.txt文件拷貝到容器/usr/local/路徑下
COPY c.txt /usr/local/copy_c.txt
#把tar包添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.19.tar.gz /usr/local/
#安裝vim編輯器
RUN yum -y install vim
#設置工作訪問時的WORKDIR路徑,登錄落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置環境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.19
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.19
ENV PATH $PATH:%JAVA_HOME/bin:%CATALINA_HOME/lib:%CATALINA_HOME/bin
#容器運行時監聽的端口
EXPOSE 8080
#啓動時運行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-9.0.19/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.19/bin/logs/catalina.out

 

  • 第二步: build出新鏡像

 

sudo docker build -f Dockerfile1 -t mycentos:new .

 

  • 第三步: 運行新鏡像

 

docker run -it -p 9080:8080 --name myt9 -v /home/suny/mydocker/tomcat9/test:/usr/local/apache-tomcat-9.0.19/webapps/test -v /home/suny/mydocker/tomcat9/logs:/usr/local/apache-tomcat-9.0.19/logs --privileged=true mycentos:new

 

案例三: docker安裝mysql容器

  • 第一步:
docker pull mysql:5.7
  • 第二步:
docker run -d --name mysql -p 12345:3306 -v /home/suny/mydocker/mysql5.7/conf:/etc/mysql/conf.d -v /home/suny/mydocker/mysql5.7/logs:/logs -v /home/suny/mydocker/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  • 第三步: 備份docker運行的mysql容器的數據
docker exec 容器ID sh -c "exec mysqldump --all-databases -uroot -p'root'" > /home/suny/mydocker/mysql5.7/all-databases.sql

案例四: docker安裝redis容器

  • 第一步:
docker pull redis:3.2
  • 第二步:
docker run -d --name redis -p 9979:6379 -v /home/suny/mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/suny/mydocker/redis/data:/data redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
  • 第三步:  在宿主機redis.conf目錄創建redis.conf文件,並複製相關配置文件
  • 第四步:  連接docker redis運行容器的redis-cli
docker exec -it 容器ID redis-cli

本地鏡像推送到阿里雲鏡像倉庫

sudo docker login [email protected] registry.cn-hangzhou.aliyuncs.com
sudo docker tag 鏡像ID registry.cn-hangzhou.aliyuncs.com /suny/上傳到阿里雲顯示的(鏡像名:版本號)
sudo docker push registry.cn-hangzhou.aliyuncs.com /suny/上傳到阿里雲顯示的(鏡像名:版本號)

 

注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用

歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!

---------------------------------------------------------------------------------------

搞笑一則:能動手儘量別吵吵
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章