基本操作
安装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
运行一个docker应用
docker run ubuntu:15.10 /bin/echo "hello Docker"
常用命令
docker images
docker ps
docker ps -a
删除一个容器
docker rm a4710df7be21
docker rm 容器ID||容器名称
运行交互式的容器
docker run -it ubuntu:15.10 /bin/bash
后台运行与停止容器
docker run -d ubuntu:15.10
docker stop 容器ID||容器名称
查看docker日志
docker logs 容器ID||容器名称
docker logs -f 容器ID
与正在运行的容器交互
docker exec -it 容器ID||容器名称 /bin/bash
docker exec -it tomcat /bin/bash
docker 帮助和命令
docker COMMAND --help
docker 容器运行一个web应用程序
docker run -d -P training/webapp python app.py
-d 在后台运行
-P 容器应用的端口映射到宿主机的随机端口
绑定指定映射端口
docker run -d -p 5000:5000 training/webapp python app.py
- 左边5000端口代表宿主机
- 右边5000端口代表容器
查看容器正在运行的进程
docker top 容器ID||容器名称
查看容器状态
docker inspect 容器ID||容器名称
- Return low-level information on Docker objects
- 返回docker对象的低级信息
批量移除删除容器
docker rm 容器ID 容器ID
- 多个容器ID之间加空格
镜像管理
获取镜像
docker pull tomcat
- 自动获tag为latest的镜像
查找镜像
docker search tomcat
更新镜像
-
从已创建的容器中更新镜像,并提交这个镜像。
docker commit -m="has update" -a="huangsz" d5f01302b56c huangsz/ubuntu:v2 -m 镜像说明 -a 作者 d5f01302b56c 容器ID
-
使用Dockerfile指令来创建一个新的镜像。
Dockerfile是命令组合。可以使用在terminal中的任何命令。Docker读取Dockerfile中的指令自动生成镜像。
docker build -f /path/to/Dockerfile
Dockerfile文件说明
- 第一条指令必须是FROM
-
开通的是注释
- Dockerfile只能有一个CMD命令
cd /usr/local/docker
mkdir myubuntu
cd myubuntu
vim Dockerfile
----------Start Dockerfile文件内容----------
FROM ubuntu:15.10
MAINTAINER john
RUN /bin/bash -c 'echo "Hello World"'
COPY test.txt /home #左边宿主机文件目录 右边容器目录
WORKDIR /home
CMD ["/bin/echo","this is test"]
EXPOSE 80
EXPOSE 8080
----------End Dockerfile文件内容----------
Docker build huangsz/myubuntu -f ./Dockfile
Dockfile常用命令
FROM - 镜像来源,基于哪一个镜像修改
MAINTAINER - 作者
RUN - 执行命令
COPY - 宿主机的资源文件复制到容器中
WORKDIR - 指定工作目录(类似于cd)
EXPOSE - 暴露端口
移除镜像
docker rmi 镜像ID
设置镜像标签
docker tag 镜像ID huangsz/ubuntu:v2
Docker 实例教程
运行容器
docker run --name tomcat -p 8080:8080 -d tomcat
--name 指定容器的名字
-p 端口映射
docker exec -it tomcat /bin/bash
进入容器交互
安装mysql
docker pull mysql
运行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 挂载目录, 冒号左边是宿主机右边是容器
- -e 设置环境变量 Set environment variables
- -d 后台运行
部署项目
创建一个Dockerfile
FROM tomcat
MAINTAINER john
ADD app.war /usr/local/tomcat/webapps/app.war
数据卷
数据卷的主要作用
- 绕过拷贝写,本地磁盘IO性能
- 有些文件不需要在
dcoker commit
中打包进镜像文件 - 在多个容器间共享目录
- 宿主与容器间共享目录
- 宿主与容器间共享文件
创建数据卷
有两种方式添加数据卷
- 在Dockerfile中指定VOLUME后的目录,如:
VOLUME /var/lib/test
- docker run 命令添加-v选项
docker run --name tomcat -p 8080:8080 -v /share/webapps:/usr/local/tomcat/webapps -d tomcat
- /share/webapps 是共享数据卷
数据备份
给mysql的docker增加共享数据卷,定期备份即可。
Docker Compose
简介
使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。主要用于简化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
如果连接比较慢,可以换成国内源:
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
使用
创建一个 docker-compose.yml
配置文件。注意yml是用空格缩进的,不要用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
参数说明:
- version 指定脚本语法解释器版本
- services 需要启动的服务列表(名字随便,不要重复)
- restart 总是自动重启(物理服务器重启-容器重启)
- image 镜像文件
- container_name 容器名称
- ports 开放端口
启动:docker-compose up
删除:docker-compose down
常用命令
docker-compose up -d nginx 构建建启动nignx容器
docker-compose exec nginx bash 登录到nginx容器中
docker-compose down 删除所有nginx容器,镜像
docker-compose ps 显示所有容器
docker-compose restart nginx 重新启动nginx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
docker-compose build nginx 构建镜像
docker-compose build --no-cache nginx 不带缓存的构建。
docker-compose logs nginx 查看nginx的日志
docker-compose logs -f nginx 查看nginx的实时日志
docker-compose config -q 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx 以json的形式输出nginx的docker日志
docker-compose pause nginx 暂停nignx容器
docker-compose unpause nginx 恢复ningx容器
docker-compose rm nginx 删除容器(删除前必须关闭容器)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 启动nignx容器
附录
阿里云ubuntu数据源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
阿里云ubuntu数据源
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或者执行:
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