docker學(xué)習(xí)筆記

基本操作

安裝docker

不解釋,不說明

配置Docker 加速器

https://7r1xoz0i.mirror.aliyuncs.com

ubuntu 下可以這樣配置:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://7r1xoz0i.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

運(yùn)行一個(gè)docker應(yīng)用

docker run ubuntu:15.10 /bin/echo "hello Docker"

常用命令

docker images
docker ps
docker ps -a

刪除一個(gè)容器

docker rm a4710df7be21
docker rm 容器ID||容器名稱

運(yùn)行交互式的容器

docker run -it ubuntu:15.10 /bin/bash

后臺(tái)運(yùn)行與停止容器

docker run -d ubuntu:15.10
docker stop 容器ID||容器名稱

查看docker日志

docker logs 容器ID||容器名稱
docker logs -f 容器ID

與正在運(yùn)行的容器交互

docker exec -it 容器ID||容器名稱 /bin/bash

docker exec -it tomcat /bin/bash

docker 幫助和命令

docker COMMAND --help 

docker 容器運(yùn)行一個(gè)web應(yīng)用程序

docker run -d -P training/webapp python app.py
-d 在后臺(tái)運(yùn)行
-P 容器應(yīng)用的端口映射到宿主機(jī)的隨機(jī)端口

綁定指定映射端口

docker run -d -p 5000:5000 training/webapp python app.py
- 左邊5000端口代表宿主機(jī)
- 右邊5000端口代表容器

查看容器正在運(yùn)行的進(jìn)程

docker top 容器ID||容器名稱

查看容器狀態(tài)

docker inspect 容器ID||容器名稱
- Return low-level information on Docker objects
- 返回docker對(duì)象的低級(jí)信息

批量移除刪除容器

docker rm 容器ID 容器ID
- 多個(gè)容器ID之間加空格

鏡像管理

獲取鏡像

docker pull tomcat
- 自動(dòng)獲tag為latest的鏡像

查找鏡像

docker search tomcat

更新鏡像

  1. 從已創(chuàng)建的容器中更新鏡像,并提交這個(gè)鏡像。

    docker commit -m="has update" -a="huangsz" d5f01302b56c huangsz/ubuntu:v2
    -m 鏡像說明
    -a 作者
    d5f01302b56c 容器ID
    
    
  2. 使用Dockerfile指令來創(chuàng)建一個(gè)新的鏡像。

    Dockerfile是命令組合??梢允褂迷趖erminal中的任何命令。Docker讀取Dockerfile中的指令自動(dòng)生成鏡像。

    docker build -f /path/to/Dockerfile
    

Dockerfile文件說明

  • 第一條指令必須是FROM
  • 開通的是注釋

  • Dockerfile只能有一個(gè)CMD命令
cd /usr/local/docker 
mkdir myubuntu
cd myubuntu
vim Dockerfile
----------Start Dockerfile文件內(nèi)容----------
FROM ubuntu:15.10
MAINTAINER john
RUN /bin/bash -c 'echo "Hello World"'
COPY test.txt /home  #左邊宿主機(jī)文件目錄 右邊容器目錄
WORKDIR /home
CMD ["/bin/echo","this is test"]
EXPOSE 80
EXPOSE 8080
----------End Dockerfile文件內(nèi)容----------
Docker build huangsz/myubuntu -f ./Dockfile

Dockfile常用命令

FROM - 鏡像來源,基于哪一個(gè)鏡像修改
MAINTAINER - 作者
RUN - 執(zhí)行命令
COPY - 宿主機(jī)的資源文件復(fù)制到容器中
WORKDIR - 指定工作目錄(類似于cd)
EXPOSE - 暴露端口

移除鏡像

docker rmi 鏡像ID

設(shè)置鏡像標(biāo)簽

docker tag 鏡像ID huangsz/ubuntu:v2

Docker 實(shí)例教程

運(yùn)行容器

docker run --name tomcat -p 8080:8080 -d tomcat
--name 指定容器的名字
-p 端口映射

docker exec -it tomcat /bin/bash
進(jìn)入容器交互

安裝mysql

docker pull mysql

運(yùn)行mysql

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456
-d mysql
  • -v 掛載目錄, 冒號(hào)左邊是宿主機(jī)右邊是容器
  • -e 設(shè)置環(huán)境變量 Set environment variables
  • -d 后臺(tái)運(yùn)行

部署項(xiàng)目

創(chuàng)建一個(gè)Dockerfile

FROM tomcat
MAINTAINER john
ADD app.war /usr/local/tomcat/webapps/app.war

數(shù)據(jù)卷

數(shù)據(jù)卷的主要作用

  • 繞過拷貝寫,本地磁盤IO性能
  • 有些文件不需要在 dcoker commit中打包進(jìn)鏡像文件
  • 在多個(gè)容器間共享目錄
  • 宿主與容器間共享目錄
  • 宿主與容器間共享文件

創(chuàng)建數(shù)據(jù)卷

有兩種方式添加數(shù)據(jù)卷

  1. 在Dockerfile中指定VOLUME后的目錄,如:VOLUME /var/lib/test
  2. docker run 命令添加-v選項(xiàng)
docker run --name tomcat -p 8080:8080 -v /share/webapps:/usr/local/tomcat/webapps -d tomcat
  • /share/webapps 是共享數(shù)據(jù)卷

數(shù)據(jù)備份

給mysql的docker增加共享數(shù)據(jù)卷,定期備份即可。

Docker Compose

簡介

使用 Docker Compose 可以輕松、高效的管理容器,它是一個(gè)用于定義和運(yùn)行多容器 Docker 的應(yīng)用程序工具。主要用于簡化docker的操作。

安裝

curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

如果連接比較慢,可以換成國內(nèi)源:
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


chmod +x /usr/local/bin/docker-compose

安裝完畢-查看是否安裝成功
docker-compose -v

使用

創(chuàng)建一個(gè) docker-compose.yml 配置文件。注意yml是用空格縮進(jìn)的,不要用Tab。

version: '3'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080
  webapp:
    restart: always
    image: training/webapp
    container_name: webapp
    ports:
      - 5000:5000
  mysql:
    restart: always
    image: mysql
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  - /share/webapps:/tomcat/webapps
environment:
  TZ: Asia/Shanghai

參數(shù)說明:

  • version 指定腳本語法解釋器版本
  • services 需要啟動(dòng)的服務(wù)列表(名字隨便,不要重復(fù))
  • restart 總是自動(dòng)重啟(物理服務(wù)器重啟-容器重啟)
  • image 鏡像文件
  • container_name 容器名稱
  • ports 開放端口

啟動(dòng):docker-compose up

刪除:docker-compose down

常用命令

docker-compose up -d nginx      構(gòu)建建啟動(dòng)nignx容器
docker-compose exec nginx bash  登錄到nginx容器中
docker-compose down             刪除所有nginx容器,鏡像
docker-compose ps               顯示所有容器
docker-compose restart nginx    重新啟動(dòng)nginx容器
docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不啟動(dòng)關(guān)聯(lián)容器,并容器執(zhí)行php -v 執(zhí)行完成后刪除容器

docker-compose build nginx            構(gòu)建鏡像        
docker-compose build --no-cache nginx 不帶緩存的構(gòu)建。
docker-compose logs  nginx            查看nginx的日志 
docker-compose logs -f nginx          查看nginx的實(shí)時(shí)日志
docker-compose config  -q             驗(yàn)證(docker-compose.yml)文件配置,當(dāng)配置正確時(shí),不輸出任何內(nèi)容,當(dāng)文件配置錯(cuò)誤,輸出錯(cuò)誤信息。 

docker-compose events --json nginx 以json的形式輸出nginx的docker日志

docker-compose pause nginx    暫停nignx容器
docker-compose unpause nginx  恢復(fù)ningx容器
docker-compose rm nginx       刪除容器(刪除前必須關(guān)閉容器)
docker-compose stop nginx     停止nignx容器
docker-compose start nginx    啟動(dòng)nignx容器

附錄

阿里云ubuntu數(shù)據(jù)源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

阿里云ubuntu數(shù)據(jù)源

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

如果沒有安裝vi或vim或者執(zhí)行:

cp /etc/apt/sources.list /etc/apt/sources.list.bak;
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" > /etc/apt/sources.list
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker 學(xué)習(xí)目標(biāo): 掌握Docker基礎(chǔ)知識(shí),能夠理解Docker鏡像與容器的概念 完成Docker安裝與啟...
    執(zhí)筆夢(mèng)一場閱讀 3,521評(píng)論 2 10
  • 原文地址:LoveDev Docker相對(duì)于傳統(tǒng)意義上的虛擬機(jī)最大的區(qū)別就在于傳統(tǒng)虛擬機(jī)是虛擬出一套硬件后,再在上...
    KevinLive閱讀 3,845評(píng)論 3 7
  • Docker三劍客(Machine Compose Swarm) 容器技術(shù)充分利用操作系統(tǒng)本身已有的機(jī)制和特性,可...
    小寶_6d94閱讀 564評(píng)論 0 10
  • 什么是容器 容器是一種輕量級(jí),可移植、自包含的軟件的打包技術(shù),使應(yīng)用程序可以在幾乎任何地方以相同的方式運(yùn)行。容器由...
    Vincilii閱讀 507評(píng)論 6 0
  • 一個(gè)人從小就被告訴你各種不行,在學(xué)習(xí)上有點(diǎn)成績就被告知人外有人天外有天,外貌上稍微有點(diǎn)自信,就會(huì)被告知要追求內(nèi)在美...
    林多多1995閱讀 862評(píng)論 4 6

友情鏈接更多精彩內(nèi)容