Docker 入门使用 镜像编排 docker仓库 命令总结

DOCKER

一 DOCKER安装与启动

1.安装docker | docker版本列表 |

yum install | list docker 

2.检查安装是否成功

docker vsersion

3.启动docker

service docker start

二 DOCKER镜像使用

1.检索名称为“java”的镜像

docker search java

image

  • NAME:镜像仓库名称
  • DESCRIPTION:镜像仓库描述
  • STARS:镜像收藏数
  • OFFICAL:是否为官方镜像
  • AUTOMATED:表示是否是自构建库仓

2.下载镜像

docker pull java
// 直接下载默认最新版的Java镜像
docker pull docker.io/java:7
//从指定的docker registry 中下载标签我7的java镜像

3.下载的镜像列表

docker images

image

4.删除镜像

docker rmi java

三,docker容器的常用命令

1.新建并启动容器

docker run java /bin/echo 'hello world'
docker run java /bin/echo 'hello world'

2列出容器

docker ps

image

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


Dockerfile

Dockerfile 构建Docker镜像

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

Dockerile 常用操作指令

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指令都将该目录作为当前目录

image



Docker Registry管理Docker 镜像

官方仓库 Docker Hub

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]

ali 的Docker Hub

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 


Docker Compose

一、Compose安装

在安装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

二、Compose命令补全

安装命令补全

确保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 基本步骤

  • 使用dockerfile定义应用程序环境,以便在任何地方重现该环境
  • 在docker-compose.xml中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行
  • 运行docker-compose up 命令,启动并运行整个应用程序

docker-compose.yml常用命令

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

docker-compose 常用命令

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 后台运行并启动所有容器

Docker Compose 网络设置

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

你可能感兴趣的:(docker)