基礎命令:
# 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/上傳到阿里雲顯示的(鏡像名:版本號)
注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用
歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!
---------------------------------------------------------------------------------------
搞笑一則:能動手儘量別吵吵