docker image pull alpin:latest
docker image ls / docker images
--filter xx=xx
danging = true/false 返回(非)悬虚镜像
before 镜像名称或id
since 镜像名称或id
label 镜像标签
--digests # 查看镜像摘要
docker image build -t img:tag
--nocache=true
--squash # 将镜像合并不分层;但生成的镜像层过大,无法共享
# 用 apt-get install no-install-recommends 减少下载量
docker image inspect # 查看镜像层
docker history # 显示镜像构建记录
docker image tag now:tag new-name:new-tag # 创建新标签
docker container ls
docker container run -it ubuntu:latest /bin/bash
-it 交互式执行命令 并将shell连接到当前终端
Ctrl-PQ 退出容器还保持运行
docker conrainer run
-d
--name 容器名称
-p 80:80
-e # 定义环境变量
--network docker0/network-name # 指定连接的网络
-v /opt/data:/var/lib/mysql
--restart always / unless-stopped / on-failed
--flag # 将卷挂载到新建容器中
img:tag
docker exec -it 3234d5 /bin/bash # 进入到运行中的容器
docker container stop docker-id
docker container rm docker-id
docker container rm -f $(docker container ls -aq) # 删除所有容器
FROM image
LABEL 信息="xxx"
RUN 执行的命令 # 没执行一次创建一个新的层
COPY 终端路径 镜像路径
ADD 复制文件,同上
WORKDIR 当前工作目录
EXPOSE 记录应用使用的端口
ENV 定义环境变量
ENTRYPOINT ["镜像运行后执行的命令", "参数"] # 在shell环境下运行
CMD 执行命令 # 无shell环境
FROM alpine
LABEL maintainer="nigelpoulton@hotmail.com"
RUN apk add --update nodejs nodejs-npm
COPY . /src
WORKDIR /src
RUN npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]
FROM python:3.4-alpine # 基础镜像
ADD . /code # 将app复制到镜像中
WORKDIR /code # 设置工作目录
RUN pip install -r requirements.txt # 安装依赖
CMD ["python", "app.py"] # 设置默认启动命令
FROM node:latest AS storefront
WORKDIR /usr/src/atsea/app/react-app
COPY react-app .
RUN npm install
RUN npm run build
FROM maven:latest AS appserver
WORKDIR /usr/src/atsea
COPY pom.xml .
RUN mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency
\:resolve
COPY . .
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests
FROM java:8-jdk-alpine AS production
RUN adduser -Dh /home/gordon gordon
WORKDIR /static
COPY --from=storefront /usr/src/atsea/app/react-app/build/ .
WORKDIR /app # 从其他镜像复制应用
COPY --from=appserver /usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar . # 从其他镜像复制
ENTRYPOINT ["java", "-jar", "/app/AtSea-0.0.1-SNAPSHOT.jar"]
CMD ["--spring.profiles.active=postgres"]
docker-compose up -d
down / top / stop / ps / restart
version: "3.5"
services:
web-fe:
build: . # 指定dockerfile的目录
command: python app.py # 在docker容器中执行
ports:
- target: 5000 # 将内部端口映射到外部
- published: 5000
networks:
- counter-net # 连接到制定网络
volumes:
- type: volume
source: counter-vol
target: /code # 数据持久化
- .:/lib/dir # 两种持久化方式
redis:
image: "redis:alpine"
networks:
counter-net:
networks:
counter-net:
volumes:
counter-vol:
# docker-compose [-f ./docker-compose.yml] -d
使用端口
# 初始化节点
docker swarm init --advertise-addr 10.0.0.1:2377 --listen-addr 10.0.0.1:2377
# 列出节点
docker node ls
# 在管理节点上获得token,以 工作/管理 节点身份加入
docker swarm join-token worker/manager
# 工作节点加入集群
docker swarm join --token SWMTKN-1-0uahebax...c87tu8dx2c 10.0.0.1:2377 --advertise-addr 10.0.0.4:2377 --listen-addr 10.0.0.4:2377
--autolock # 强制要求重启的管理节点在提供一个集群解锁码之后才有权从新接入集群
docker swarm update --autolock=true # 开启并生成解锁码
>> SWMKEY-1-5+ICW2kRxPxZrVyBDWzBkzZdSd0Yc7Cl2o4Uuf9NPU4
# 开启后再意外退出的节点加入需要解锁码
docker swarm unlock # 解锁
集群中使用了raft技术。部署奇数个管理节点,防止脑裂;不部署太多管理节点(一般3-5个最多7个),越多达成共识的时间越长。
docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci # 启动服务
docker service ls
docker service ps <service>
docker service inspect --pretty # 获取详细信息
docker service scale demo=5 # 对副本个数进行增减
docker service update # 对属性进行变更
docker service logs
docker service rm
网络
docker network ls
docker network create -d bridge localnet # 创建本地桥接网络
docker network create -d macvlan --subnet=10.0.0.0/24 --ip-range=10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth0.100 macvlan100
docker network create -d overlay uber-net
子命令 | 说明 |
---|---|
docker network connect | 将容器连接到网络。 |
docker network create | 创建新的 Docker 网络。默认情况下,在 Windows 上会采用 NAT 驱动,在 Linux 上会采用 Bridge 驱动。可以使用 -d 参数指定驱动(网络类型)。 |
docker network disconnect | 断开容器的网络。 |
docker network inspect | 提供 Docker 网络的详细配置信息。 |
docker network ls | 用于列出运行在本地 Docker 主机上的全部网络。 |
docker network prune | 删除 Docker 主机上全部未使用的网络。 |
docker network rm | 删除 Docker 主机上指定网络。 |
docker volume create myvol
docker volume inspect
docker volume ls
docker volume prune
docker volume rm
version: ‘2.0‘
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis network: - mynetwork
redis:
image: redis network: - mynetwork
volumes:
logvolume01: {}network: mynetwork: driver: bridge
# 可能等同于下方命令
docker build .
docker run -d -p 5000:5000 -v .:/code -v logvolume01 --link redis --name web
docker run -d --name redis redisdocker volume create logvolume01docker network create mynetwork
# wordpress-mysql
version: ‘3‘
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge
version: "3"
services:
voting-app:
build: ./voting-app/.
volumes:
- ./voting-app:/app
ports:
- "5000:80"
links:
- redis
networks:
- front-tier
- back-tier
result-app:
build: ./result-app/.
volumes:
- ./result-app:/app
ports:
- "5001:80"
links:
- db
networks:
- front-tier
- back-tier
worker:
build: ./worker
links:
- db
- redis
networks:
- back-tier
redis:
image: redis
ports: ["6379"]
networks:
- back-tier
db:
image: postgres:9.4
volumes:
- "db-data:/var/lib/postgresql/data"
networks:
- back-tier
volumes:
db-data:
networks:
front-tier:
back-tier:
docker service create --name wordpress -p 80:80 -e WORDPRESS_ROOT_PASSWORD=000000 -e WORDPRESS_DB_NAME=wordpress --network my-overlay wordpress
docker service create --name mysql -e MYSQL_ROOT_PASSWORD=000000 -e MYSQL_DATABASE=wordpress --network my-overlay --mount type=volume,source=volume-demo,destination=/var/lib/mysql mysql
原文:https://www.cnblogs.com/zhh567/p/14119835.html