Docker 安装(Docker的官网好像要科学上网)
Docker 自动识别Linux发行版的类型,提供用于安装Docker包的脚本
wget -qo- https://get.docker.com/ | sh
Docker 命令实例
连接Docker Hub
# 官方镜像省略Docker Hub用户名,只设置镜像名
docker pull centos
docker pull ubuntu:14.04
docker pull registry.hub.docker.com/ubuntu:14.04
# 登录docker hub之后从个人仓库中获取镜像,
docker login
docker pull waichan/hello:0.1
# 将本地镜像推送到docker hub 仓库(注册服务器)
docker tag hello:0.1 waichan/hello:0.1
docker push waichan/hello:0.1
创建镜像与容器
# 利用本地DockerFile hello 创建镜像hello
docker build -t hello /opt/hello
// 运行镜像ubuntu:14:04(如果本地不存在镜像,则从Docker Hub上下载),创建容器hello,并运行 /bin/bash命令。
// -i 激活标准输入,使用改选项在Bash中输入命令
// -t 使用TTY模式,若要使用Bash,则必须设置改选项
// -d Detached模式,一般称为守护进程模式,容器以后台方式运行
docker run -i -t -d --name hello ubuntu:14.04 /bin/bash
docker attach hello
删除镜像与容器
# 删除所有无名镜像
docker rmi $(docker images -f "dangling=true" -q)
# 删除所有容器 -a、-q获取容器ID
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -aq)
连接镜像
# 使用--link选项连接Redis容器,在其他容器中使用别名cache可以访问Redis容器
docker run -d --name cache redis:latest
docker run -i -t --link cache:cache ubuntu:14.04 bash
DockerFile
Dockerfile Reference
Dockerfile 的编写格式为<命令><形式参数>,#是注释,命令不区分大小写,一般使用大写字母。
FROM <镜像>:<标签> // 指定基于的基础镜像。Docker 镜像基于已创建的镜像
MAINTAINER <创建者信息> // 维护者信息
RUN <命令> // 运行shell脚本或命令
ENTRYPOINT <命令> // 用于设置容器启动时运行的脚本或命令
EXPOSE <端口号> // 用于设置与主机相连的端口号
ENV <环境变量> <值> // 设置环境变量
VOLUME <容器目录> // 要与主机共享的目录, 但是不能与主机的特定目录进行连接
USER <账号用户名> // 设置运行命令的用户账号,用于RUN, CMD, ENTRYPOINT
WORKDIR // 用于设置执行RUN, CMD, ENTRYPOINT命令的目录
CMD <命令> // 指定容器启动时执行的文件或shell脚本,只能使用1次
ARG <name>[=<default value>]// 在使用docker build时给使用--build-arg <varname>=<value>给Dockerfile中arg定义的变量赋值
ONBUILD <Dockerfile命令> <Dockerfile命令的形式参数> //设置一些要触发的操作,将当前镜像创建为其他镜像时
ADD <要复制的文件> <文件在镜像中的路径> //用于向镜像添加文件, 会解压缩,可以使用URL
COPY <要复制的文件> <文件在镜像中的路径> //用于向镜像添加文件, 不会解压缩,不能使用URL
RUN["<可执行文件>", "<形式参数1>", "<形式参数2>"] //无shell直接运行
CMD["<可执行文件>", "<形式参数1>", "<形式参数2>"] //无shell直接运行
ENTRYPOINT["<可执行文件>", "<形式参数1>", "<形式参数2>"] //无shell直接运行
VOLUME["容器目录1", "容器目录2"] //数组形式进行设置
Docker + Nginx
FROM ubuntu:14.04
MAINTAINER Foo Bar <foo@bar.com>
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
Docker + Mysql
DockerFile
FROM ubuntu:14.04
# 跳过用户之间输入root密码的部分
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN echo "mysql-server mysql-server/root_password password" | debconf-set-selections
RUN echo "mysql-server mysql-server/root_password_again password" | debconf-set-selections
RUN apt-get install -y mysql-server
WORKDIR /etc/mysql
# 使用sed修改/etc/mysql目录my.cnf文件的内容.将bind-address=127.0.0.1修改为bind-address=0.0.0.0
# 若不修改, 则无法从外部连接MySQL
RUN sed -i "s/127.0.0.1/0.0.0.0/g" my.cnf
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 3306
# 容器启动时运行脚本文件
ENTRYPOINT /entrypoint.sh
entrypoint.sh
#!/bin/bash
# 如果环境变量中无MYSQL_ROOT_PASSWORD, 则不运行数据库并退出
if [ -z $MYSQL_ROOT_PASSWORD ]; then
exit 1
fi
# 使用mysql_install_db 安装数据库文件
mysql_install_db --user mysql > /dev/null
cat > /tmp/sql <<EOF
USE mysql;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
UPDATE user SET password=PASSWORD("$MYSQL_ROOT_PASSWORD") WHERE user='root';
EOF
mysqld --bootstrap --verbose=0 < /tmp/sql
rm -rf /tmp/sql
mysqld
运行命令
# 运行容器并设置root账户密码
docker run -d --name db -e MYSQL_PORT_PASSWORD=password mysql
Docker 常用命令 --version 1.3.1
docker <选项><命令><参数>
//--------------------------------------选项-------------------------------
-b、--bridge="":使用事先创建的网桥接口。若设置为none,则不再容器内使用网络。
-D、--debug=false:启用调试模式
-d、--daemon=false: 以守护进程模式运行
-H、--host[]: 以守护进程模式运行时,设置套接字路径。tcp://<IP地址或域名>:<端口号>
-icc=true: 开启容器间通信
--ip=0.0.0.0: 使用docker run命令的-p选项将端口暴露在外时,设置要绑定的默认IP地址。
--registry-mirror=[]:设置Docker Registry的镜像地址。
-v、--version=false: 打印版本信息
//--------------------------------------命令-------------------------------
# 将标准输入与标准输出连接到正在运行的容器
docker attach <选项><容器名称,ID>
# build命令使用Dockerfile 文件创建镜像, Dockerfile路径可以是本地, URL, -
docker build <选项><Dockerfile 路径>
#从容器的修改项创建新的镜像
docker commit <选项><容器名称, ID> <注册名称>/<镜像名称>:<标签>
# 将容器的目录或文件复制到主机。若将cp命令中的路径设置为目录,则将该目录下的所有内容复制到主机
docker cp <容器名称>:<路径> <主机路径>
# create 命令使用制定的镜像创建容器。与run命令不同,使用create命令只能创建容器而并不启动
docker create <选项> <镜像名称, ID> <命令> <参数>
# export命令用于将容器的文件系统导出为tar文件包
docker export <容器名称, ID>
# import命令用于从压缩为tar文件的文件系统创建镜像
docker import <tar文件的URL或者-> <注册名称>/<镜像名称>:<标签>
# image命令用于输出镜像列表
docker images <选项> <镜像名称>
# info命令用于显示当前系统信息、Docker容器、镜像个数、设置等信息
docker info
# inspect命令用于以JSON格式显示容器与镜像的详细信息
docker inspect <选项> <容器或镜像名称,ID>
# kill 命令用于向容器发送 KILL信号,从而关闭容器
docker kill <选项> <容器名称,ID>
# save 命令用于将镜像保存为tar包文件
docker save <选项> <镜像名称>:<标签>
# load命令用于从tar文件创建镜像, tar文件由docker save命令创建, 包含镜像名称与标签
docker load <选项>
# login命令用于登录Docker的注册服务器, docker hub
docker login <选项> <Docker注册服务器的URL>
# logout 命令用于从Docker注册服务器中登出
docker logout <Docker 注册服务器 URL>
# logs命令用于输出容器日志
docker logs <容器名称, ID>
# port命令用于查看容器的某个端口是否处于开放状态
docker port <容器名称, ID> <端口>
# pause命令用于暂停容器正在运行的所有进程
docker pause <容器名称, ID>
# unpause 命令用于重启pause命令暂停的容器
docker unpause <容器名称, ID>
# ps命令用于输出容器列表
docker ps <选项>
# pull 命令用于从Docker注册服务器下载镜像
docker pull <选项> <注册名称>/<镜像名称>:<标签>
# push命令用于将镜像推送到Docker注册服务器
docker push <注册名>/<镜像名>:<标签>
# tag 命令用于为镜像设置标签
docker tag <选项> <镜像名称>:<标签> <注册地址,用户名>/<镜像名称>:<标签>
# restart 命令用于重启容器
docker restart <选项><容器名称, ID>
# rm命令用于删除容器
docker rm <选项> <容器名称, ID>
# rmi 命令用于删除镜像。若不指定标签,则删除latest标签
docker rmi <注册名称>/<镜像名称, ID>:<标签>
# run 命令用于使用指定镜像创建容器
docker run <选项> <镜像名称,ID> <命令> <参数>
# search命令用于在Docker Hub中搜索镜像
docker search <选项> <搜索词>
# start命令用于启动容器
docker start <选项> <容器名称, ID>
# stop 命令用于终止容器
docker stop <选项> <容器名称, ID>
# top命令用于显示容器中正在运行的进程信息, ps选项设置Linux ps命令的选项
docker top <容器名称, ID> <ps 选项>
# version命令用于输出Docker的版本信息
dockerr version
在Bash shell中输入exit或Ctrl + D终止容器. 若依次输入Ctrl+P, Ctrl + Q, 则不会终止容器而只退出.