文章目录
Docker使用
一、Docker容器使用
docker
docker stats --help #查看docker stats指令的具体使用方法
docker pull ubuntu #获取ubuntu镜像
docker run -it ubuntu /bin/bash #使用ubuntu镜像启动一个容器
exit #退出终端
docker ps -a #查看所有的容器命令
docker start b53435523421432 #启动一个已停止的容器
docker run -itd --name ubuntu-test ubuntu /bin/bash #-d后台运行
docker stop <容器id>
docker restart <容器id>
docker attach <容器id> #进入容器
docker exec -it 243c32535da7 /bin/bash #退出后台继续运行
docker export 243c32535da7 ubuntu.tar #导出
cat docker/ubuntu.tar | docker import - test/ubuntu:v1 #导入
docker import http://example.com/exampleimage.tgz example/imagerepo
docker rm -f 1256fca3534 #删除容器
运行一个web应用
docker pull training/webapp #载入镜像
docker run -d -P training/webapp python app.py
查看web应用容器
docker ps
通过-p参数来设置不一样的端口
docker run -d -p 5000:5000 training/webapp python app.py
网络端口的快捷方式
docker port aadadfwerwesd
查看web应用程序日志
docker logs -f af543634rr345
查看web应用程序容器的进程
docker top hello
检查web应用程序
docker inspect hello
停止web应用容器
docker stop hello
重启web应用容器
docker start hello
docker ps -l #查询最后一次创建的容器
移除web容器
docker rm hello
二、Docker 镜像使用
docker images #列出镜像列表
docker pull ubuntu:13.10 #获取一个新的镜像
docker search httpd #查找镜像
docker pull httpd #拖去镜像
docker rmi hello-world #删除镜像
docker run -t -i ubuntu:15.10 /bin/bash
三、Docker 容器连接
网络端口映射
docker run -d -P training/webapp python app.py
docker ps
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
Docker 容器互联
容器命名
docker run -d -P --name runoob training/webapp python app.py
docker ps -l
新建网络
docker network create -d bridge test-net
连接容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash #运行一个容器并连接到新建的test-net网络
docker run -itd --name test2 --network test-net ubuntu /bin/bash #打开新的终端,再运行一个容器并加入到test-net网络
apt-get update
apt install iputils-ping #在容器中使用ping
配置DNS
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
四、Docker仓库管理
登录和退出
docker login
docker loginout
docker search ubuntu #拉取镜像
docker pull ubuntu
docker tag ubuntu:18.04 username/ubuntu:18.04
docker image ls
五、Docker Dockerfile
什么是Dockerfile?
Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
下面是定制一个nginx镜像
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
RUN(命令行命令)
开始构建镜像
docker build -t nginx:test
不传参运行
docker run nginx:test
nginx -c /etc/nginx/nginx.conf #容器内会默认运行以下命令,启动主进程
传参运行
docker run nginx:test -c /etc/nginx/new.conf
nginx -c /etc/nginx/new.conf
ENV
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ARG
ARG <参数名>[=<默认值>]
VOLUME 定义匿名数据卷,在启动容器时忘记挂载数据卷
EXPOSE:仅仅只是申明端口
WORKDIR:指定工作目录
WORKDIR <工作目录路径>
USER 用于指定执行后续命令的用户和用户组
USER <用户名>[:<用户组>]
HEALTHCHECK 用于指定某个程序或指令来监控docker容器服务的运行状态
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法
ONBUILD 用于延迟构建命令的执行
ONBUILD <其他指令>
Dokcer Compose
是用于定义和运行多容器Docker应用程序的工具,通过Compose,您可以使用YML文件来配置应用程序需要的所有服务,然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务
Compose使用的三个步骤
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml定义构成应用程序的服务,这样他们可以在隔离环境中一起运行
- 最后,执行docker-compose up命令来启动运行整个应用程序
实例:
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose #将可执行权限应用于二进制文件
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #创建软链
docker-compose --version #测试是否安装成功
使用
mkdir composetest
cd composetest
在测试目录中创建一个名为app.py的文件,并复制战天以下内容
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
在此示例中,redis是应用程序网络上的redis容器的主机名,该主机使用的端口是6379
创建Dockerfile文件
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
六、Docker Machine
Docker Machine是一种可以让你在虚拟主机上安装Docker的工具,并可以使用docker-machine命令来管理主机
Docker Machine也可以集中管理所有的docker主机。
Docker Machine管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云、腾讯云、AWS、或DigitalOCean
安装
安装Docker Machine之前你需要先安装Docker
Docker Mechine 可以在多种平台上安装使用,包括Linux、MacOS以及windows
一.Linux安装命令
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
二.macOS安装命令
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
三、Window安装命令
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
mkdir -p "$HOME/bin" &&
curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
chmod +x "$HOME/bin/docker-machine.exe"
查看是否安装成功
docker-machine version
使用
1.列出可用的机器
docker-machine ls
2.创建机器
docker-machine create --driver virtualbox test
3.查看机器IP
docker-machine ip test
4.停止机器
docker-machine stop test
5.启动机器
docker-machine start test
6.进入机器
docker-machine ssh test
七、Swarm集群管理
Docker Swarm是docker的集群管理工具。它将Docker主机池转变为单个虚拟docker主机。Docker Swarm提供了标准的Docker API,所有任何已经与Docker守护程序通信的工具都可以使用Swarm轻松地扩展多个主机
原理
swarm集群管理由管理节点(manager)和工作节点(work node)
使用
docker-machine create -d virtualbox swarm-manager #创建docker机器
docker-machine ssh swarm-manager #初始化swarm集群
docker swarm init --advertise-addr 192.168.99.107 #这里的IP为创建机器时分配的ip docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377 #复制出来,在增加工作节点时会用到
#创建swarm集群工作节点(worker)
docker-machine ls
docker-machine ssh swarm-worker1
docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
# 2.查看集群信息
docker info
# 4.部署服务到集群中
docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com
# 5.查看服务部署情况
docker service ps helloworld
docker service inspect --pretty helloworld
# 6.扩展集群服务
docker service scale helloworld=2
# 7.删除服务
docker service rm helloworld
# 8.滚动升级服务
docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6
docker service update --image redis:3.0.7 redis #滚动升级redis
# 9.停止某个节点接受新的任务
docker node ls
docker node update --availability active swarm-worker1
Docker命令大全
容器生命周期管理
- run
- start/stop/restart
- kill
- rm
- pause/unpause
- create
- exec
容器操作 - ps
- inspect
- top
- attach
- events
- logs
- wait
- export
- port
容器rootfs命令 - commit
- cp
- diff
镜像仓库 - login
- pull
- push
- search
本地镜像管理 - images
- rmi
- tag
- build
- history
- save
- load
- import
info|version - info
- version