Docker从入门到放弃

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, 则不会终止容器而只退出.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值