本文以一个nginx容器:8c9ca4d17702 为例做的一些操作
image 镜像
// 从 hub.docker.com 下载镜像
docker pull nginx
// 在现有容器修改并制作一个新的image,名字是image_new_name
docker commit -m "修改并提交一个新的版本" 8c9ca4d17702 image_new_name
// 列出本地所有的容器
docker images
// 删除某个镜像
docker rmi 8c9ca4d17702 ...其他镜像id
基本
// 以daemon方式运行nginx,并且把nginx的80端口映射到本机80端口
docker run -p 8080:80 -d nginx
// 运行容器并进入容器
docker run -it -p 8080:80 nginx /bin/bash
// 停止指定的容器
docker stop 8c9ca4d17702
container 容器
// 当前正在运行的容器
docker ps
// 运行过的容器历史
docker ps -a
// 删除已经结束的容器
docker rm 8c9ca4d17702 ...其他容器id
// 宿主机复制文件到指定的docker容器指定的目录中
docker cp index.html 8c9ca4d17702://usr/share/nginx/html
// 添加文件
docker add
// 进入到容器中
docker exec -it 8c9ca4d17702 /bin/bash
// 退出当前正在运行的容器
ctrl + d
Dockerfile
构建镜像
// 创建一个docker
FROM ubuntu
MAINTAINER your_user_name
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENV MY_ENV=develop
USER mysql
VOLUME $PWD/code:/var/www/html
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80
CMD echo "hello word"
// 镜像分层;每一行命令就是一层
// 配置构建新镜像时需要忽略的文件/目录
.dockerignore
// 把本地的./目录下,除了.dockerignore中忽略的文件,其他所有文件都打包成一个镜像,名字是new_docekr_name
docker build -t new_docekr_name ./
Volume
独立于容器之外的持久化存储;容器间共享数据;卷挂载
// 展示容器的所有信息
docker inspect nginx
// 展示镜像的分层信息
docker history nginx
// 进入Docker Host虚拟机
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
// 把当前目录下的code目录映射到容器中(适合本地开发)
docker run -v $PWD/code:/var/www/html nginx
// 把其中一个容器当做存储,挂载到其他运行的容器当中
// 1、先创建一个存储容器
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
// 2、其他容器运行时指定要挂载的容器
docker run --volumes-from data_container mysql
registry 仓库
docker search nginx
docker pull nginx
docker push nginx
// 在现有的镜像新建一个自己的镜像,打一个tag
docker tag nginx my_change_ngxin
// 需要登录
docker login
// 把自己的镜像推送到远程
docker push my_change_ngxin
composer 多容器编排
docker-composer 工具,解析 docker-compose.yml 文件
以一个典型的应用为例:nginx-php-mysql,三个容器组合成一个应用
version: '2'
networks:
my_network_name:
services:
nginx:
build: ./nginx
network:
- my_network_name
depends_on:
- php
ports:
- "80:80"
php:
mysql:
image: "mysql:5.7.15"
network :
- my_network_name
environment:
MYSQL_ROOT_PASSWORD: xx
MYSQL_USER: mysql
MYSQL_PASSWORD: xx
volumes:
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"
// 拉起所有服务
docker-compose up -d
// 停掉所有服务
docker-compose stop
// 清掉构建的容器
docker-compose rm
// 重新构建服务
docker-compose build
// 所有容器的日志
docker-compose logs
// 列出当前所有容器
docker-compose ps