一 DOCKER安装与启动
1.安装docker | docker版本列表 |
yum install | list docker
2.检查安装是否成功
docker vsersion
3.启动docker
service docker start
二 DOCKER镜像使用
1.检索名称为“java”的镜像
docker search java
2.下载镜像
docker pull java
// 直接下载默认最新版的Java镜像
docker pull docker.io/java:7
//从指定的docker registry 中下载标签我7的java镜像
3.下载的镜像列表
docker images
4.删除镜像
docker rmi java
1.新建并启动容器
docker run java /bin/echo 'hello world'
docker run java /bin/echo 'hello world'
2列出容器
docker ps
3停止容器
docker stop 123123
4 强制停止容器
docker kill 123123
5 启动已停止容器
docker start 123123
6 重启容器
docker restart
7 进入容器
docker ps
docker exec -it 775c7c9ee1e1 /bin/bash
8 删除容器
docker rm 123123
1 创建一个名字叫“dockfile”的文件 无后缀。
FROM nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
2 在dockfile文件所在文件目录 执行构建镜像命令 ,其中(.)用于路径参数传递,表示当前路径。
docker build -t hememb:F .
3 运行我们刚刚构建的镜像。
docker run -d -p 91:80 hememb:F
1 ADD 复制文件
ADD ...
ADD ["" ,..."" ]
//从src复制文件到容器的dest
2 ARG 设置构建参数
ARG [=<default value>]
//构建时环境变量,在容器运行时不会存在
3 CMD 容器启动命令
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
4 COPY 复制文件
COPY ...
COPY ["" ,..."" ]
5 ENTRYPOINT 入口点
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2
6 ENV 设置环境变量
ENV
ENV =...
7 EXPOSE 声明暴露的端口
EXPOSE [...]
#相应的运行容器的使用的命令
docker run -p port image
#也可以使用-p选项启动
docker run -P image
8 FROM 指定基础镜像
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
9 LABEL 为镜像添加元数据
LABEL = = =...
10 MAINTAINER 指定维护者信息
MAINTAINER <name>
11 RUN 执行命令
RUN <command>
RUN ["executable","param1","param2"]
12 USER 设置用户
USER 用户名
13 VALUME 指定挂载点
VOLUME /data
#指定容器中一个目录具有持久化储存的功能,改目录可以被容器本身使用,也可以共享给其他容器。
14 WORKDIR 指定工作目录
WORKDIR /path/to/workdir
#切换目录指令,类似于cd命令,写在该指令后的RUN,CMD以及ENTRYPOINT指令都将该目录作为当前目录
1 注册和登录
# 1、直接在docker hub 注册一个账号就可以使用镜像仓库了
# 2、登录
docker login
# 3、username:your username 输入用户名
# 4、password:your password 输入密码
# 5、login Succeeded 登录成功
2 镜像推送
docker push hememb:F;
// 1、推送命令 可以使用[name]:[tag]或者 [imageId]
1 安装/升级你的Docker客户端
阿里云-开发者平台(https://dev.aliyun.com/)
阿里云-容器Hub服务控制台(https://cr.console.aliyun.com/)
推荐安装1.10.0以上版本的Docker客户端。
您可以通过阿里云的镜像仓库下载:docker-engine、docker-ce
或执行以下命令:
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
2 如何使用Docker加速器
针对Docker客户端版本大于1.10的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://[自己的镜像地址].mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3 登录阿里云docker registry:
sudo docker login --username=[自己的阿里用户名] registry.cn-shenzhen.aliyuncs.com
4 从registry中拉取镜像:
sudo docker pull registry.cn-shenzhen.aliyuncs.com/yizz/cms:[镜像版本号]
5 将镜像推送到registry:
sudo docker login --username=[自己的阿里用户名] registry.cn-shenzhen.aliyuncs.com
sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/yizz/cms:[镜像版本号]
sudo docker push registry.cn-shenzhen.aliyuncs.com/yizz/cms:[镜像版本号]
6 注意您的网络环境
# 从ECS推送镜像时,可以选择走内网,速度将大大提升,并且将不会损耗您的公网流量。
# 如果您申请的机器是在经典网络,请使用 registry-internal.cn-shenzhen.aliyuncs.com
# 如果您申请的机器是在vpc网络的,请使用 registry-vpc.cn-shenzhen.aliyuncs.com
在安装compose之前,要确保已经安装了docker1.3或以上版本
在Linux64位系统上安装compose:
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
安装命令补全
确保bash completion已经安装,如果当前使用非最小安装的Linux,bash completion已经OK了,如果是在MAC上,可以使用brew install bash-completion来安装
将completion脚本放在/etc/bash_completion.d/(在MAC上是/usr/local/etc/bash_completion.d/)
curl -L https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
在下次登录时,Completion功能已经可以使用
可用的补全取决于在命令行的输入,会补全:
* 可用的docker-compose命令
* 对于某一特别命令可用的选项
* 在一个给定的上下文条件(比如:具有运行或停止状态的实例的服务或者基于镜像的服务 VS 基于Dockerfile的服务)下,给出有可行的服务名称,对于docker-compose scale,补全服务名称时会自动有”=”附加上去
* 对于可选项的参数,比如:docker-compose kill -s会完成一些信号,比如SIGUP和SIGUSR1
1 基本步骤
1 build 配置构建时的选项,Compose会利用它自动构建镜像,build的值可以是一个路径,也可以是一个对象,用于指定DockerFile 和参数
# build :./dir
或者
build:
context:./dir
dockerfile:Dockerfile-alternate
args:
buildno:1
2 command覆盖容器启动后默认执行的命令,也可以是一个list,类似于Dockerfile 中的cmd指令
# command :bundle exec thin -p 3000
# command : [bundle,exec,thin,-p,3000]
3 dns 配置dns服务器,可以是一个值,也可以是一个列表
# dns :8.8.8.8
# dns :
- 8.8.8.8
- 9.9.9.9
4 dns_search 配置dns搜索域,可以是一个值,也可以是一个列表
dns_search:example.com
dns_search:
-dc1.example.com
-dc2.example.com
5 environment 环境变量设置 ,可使用数组或字典两种方式
environment:
RACK_ENV:development
SHOW:'SHOW'
SESSION_SECRET:
environment:
-RACK_ENV:development
-SHOW:'SHOW'
-SESSION_SECRET:
6 env_file 从文件中获取环境变量,可指定一个文件路径或者路径列表。如果通过docker-compose -f FILE 指定了Compose 文件,那么env_file中的路径是Compose 文件所在目录的相对路径。使用enviroment 指定的环境变量会覆盖env_file指定的环境变量
env_file: .env
env_file:
-./common.env
-./apps/web.env
-/opt/secrets.env
6 expose 暴露端口,只将端口暴露给连接的服务,而不是暴露给宿主机
expose:
-'3000'
-'8000'
7 image 指定镜像名称或镜像id,如果本地镜像不存在该镜像,Compose会尝试下载镜像
image:java
8 links 连接到其他服务的容器。可以指定服务器名称和服务器别名,可以以只指定服务器名称
web:
links:
-db
-db:database
-redis
9 networks
10 network_mode 设置网络模式
network_mode:"bridge"
network_mode:"host"
network_mode:"none"
network_mode:"service:[service name]"
network_mode:"container:[container name/id]"
11 ports: 暴露端口信息,可以使用HOST:CONTAINER的形式,也可以只指定容器端口 此时宿主机将会随机选择端口,类似于docker run -p。需要注意的是,当使用HSOT:CONTAINER格式映射端口时,容器端口小于60将会得到错误的接口,因为yaml会把xx:yy的数字解析为60进制。因此,建议使用字符串的形式。
ports:
-'3000'
-'3000-3005'
-'8000:8000'
-'9090-9091:8080-8081'
-'49100:22'
-'127.0.0.1:8001:8001'
-'127.0.0.1:9090-9091:8080-8081'
12 volumes 卷挂载路径设置,可以设置宿主机路径(HOST:CONTAINER),也可以指定访问模式(HOST:CONTAINER:ro)
#Just specify a path and let the Engine create a volume
-/var/lib/mysql
#Specify an absolute path mapping
-/opt/data:/var/lib/mysql
#Path on the host,relative to the Compose file
-./cache:/tmp/cache
#User -relative path
-~/configs:/etc/configs/:ro
#Named volume
-datavolume:/var/lib/mysql
13 volumes_from 从另一个服务或容器挂载卷,可以指定只读(ro)或者读写(rw),默认是读写(rw)
volumes_from:
-service_name
-service_name:ro
-container:container_name
-container:container_name:rw
1 build 构建或重新构建服务。服务被构建后将以project_service 的形式标记,例如:compose-setest_db
2 help
docker-compose help COMMAND
3 kill
docker-compose kill eureka
4 logs
docker-compose logs
5 port 打印绑定的公共端口
docker-compose port eureka 8761
6 ps
docker-compose ps
docker-compose ps eureka
7 pull
docker-compose pull
8 rm
docker-compose rm eureka
9 run 在一个服务上执行一个命令
docker-compose run web bash
1o scale 设置指定服务运行容器个数
docker-compose scale user=3 movie=3
11 start 启动指定服务已存在的容器
docker-compose start eureka
12 stop 停止已运行的容器
docker-compose stop eureka
13 up 聚合所有容器的输出,当命令退出时,所有容器都会停止
docker-compose up
docker-compose up -d 后台运行并启动所有容器
1 基本概念
默认情况下,Compose 会为应用创建一个网络,服务的每个容器都会加入到该网络中。这样,容器就可以被网络中的其他容器访问,不仅如此 ,该容器还能以服务名称作为hostname 被其他容器访问。
默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于Docker-compose.yml所在目录的名称。如需修改工程名称,可以使用--prject-name 标识或者 COM-POSE-PROJECT-NAME环境变量
举个栗子,假如一个应用程序在名为myapp的目录中 ,并且docker-compose.yml
vsersion:2
services:
web:
build: .
ports:
-"8000:8000"
db:
image:postgres
当容器docker-compose up 时,将会执行以下几步
1. 创建一个 名为myapp_default的网络。
2. 使用web服务的配置创建容器,他以“web”这个名称假如myapp_default
3. 使用db服务的配置创建容器,他以“db”这个名称假如网络myapp——default
容器间可以使用服务名称(web或db)作为hostname 互相访问,,例如,web这个服务可以使用postgres://db:5432访问db容器
2 更新容器
当服务的配置更改时,可以使用 docker-compose up命令更新配置。
此时,compose会删除旧的容器并创建新的容器,新容器会以不同的IP地址加入网络,名称保持布标。任何指向旧容器的连接都会被关闭,容器会重新找到新容器并连接上去。
3 创建别名 links
links允许定义一个别名,从而使用该别名访问其他服务
vsersion:"2"
services:
web:
build: .
ports:
-"8000:8000"
db:
image:postgres
这样 web服务就可以用db或者database作为hostname访问db服务了
4 自定义网络
networks命令允许创建更加复杂的的网络拓扑并指定自定义网络驱动和选项。不仅如此,还可以使用newworks将服务连接到不是油compose管理的外部创建的网络。
version:'2'
services:
proxy:
build:./proxy
networks:
-front
app:
build:./proxy
networks:
-front
-back
db:
image:postgres
networks:
-back
networks:
front:
driver:custom-driver-1
back:
driver:custom-driver-2
driver_opts:
foo:"1"
bar:"2"
其中,proxy服务于db服务隔离,两者分别使用自己的网络,app服务可以与两者通信。可以方便的实现服务间的网络隔离与连接。
5 配置默认网络
指定自定义网络驱动
vsersion:"2"
services:
web:
build: .
ports:
-"8000:8000"
db:
image:postgres
networks:
default:
driver:custom-driver-1
6 使用已经存在的网络
vsersion:"2"
services:
web:
build: .
ports:
-"8000:8000"
db:
image:postgres
networks:
default:
external:
name:my-pre-existing-network