基本操作
安裝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
更新鏡像
-
從已創(chuàng)建的容器中更新鏡像,并提交這個(gè)鏡像。
docker commit -m="has update" -a="huangsz" d5f01302b56c huangsz/ubuntu:v2 -m 鏡像說明 -a 作者 d5f01302b56c 容器ID -
使用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ù)卷
- 在Dockerfile中指定VOLUME后的目錄,如:
VOLUME /var/lib/test - 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