Docker创建容器的几种方式(pull、docker-compose、Dockerfile )

一、docker pull 方式

1、使用docker pull 镜像名称从dockerhub上拉取镜像
docker pull swoft/alphp
2、创建容器
docker run -itd --name swoft -v /data/swoft:/var/www/swoft -p 18306:18306 swoft/alphp

 

二、docker-compose 方式

docker-compose是docker的一种编排工具,通常用于编排一组服务,比如下面,编排了一个nginx,一个consul、三个swoft容器,并使用自定义网络

1、创建docker-compose.yml,如下
vi docker-compose.yml

# 编排php,redis,nginx容器
version: "3.6"
services:
  swoft_110: #服务名称
    image: swoft
    container_name: swoft_110
    ports:
      - "18110:18306"
    networks:
       swoft_consul:
         ipv4_address: 172.22.22.110
    privileged: true
    volumes:
        - /data/docker-swoft:/var/www/swoft
    working_dir: /var/www/swoft
    command: php /var/www/swoft/bin/swoft http:start &
  swoft_120:
    image: swoft
    container_name: swoft_120
    ports:
      - "18120:18306"
    networks:
       swoft_consul:
         ipv4_address: 172.22.22.120
    privileged: true
    volumes:
        - /data/docker-swoft:/var/www/swoft
    working_dir: /var/www/swoft
    command: php /var/www/swoft/bin/swoft http:start &
  swoft_130:
    image: swoft
    container_name: swoft_130
    ports:
      - "18130:18306"
    networks:
       swoft_consul:
         ipv4_address: 172.22.22.130
    privileged: true
    volumes:
        - /data/docker-swoft:/var/www/swoft
    working_dir: /var/www/swoft
    command: php /var/www/swoft/bin/swoft http:start &
  nginx:
    image: nginx1.17
    ports:
      - "81:80"
    networks:
       swoft_consul:
         ipv4_address: 172.22.22.20
    container_name: nginx1.17
    volumes:
        - /data/nginx:/nginx
  consul:
    image: consul1.4
    ports:
      - "8500:8500"
    networks:
       swoft_consul:
         ipv4_address: 172.22.22.30
    container_name: consul1.4
    command: ./consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=172.22.22.30 -ui -client=0.0.0.0

networks: # 设置网络模块
  swoft_consul:  # 自定义网络
    driver: bridge
    ipam: #定义网段
      config:
        - subnet: "172.22.22.0/24"

注:这里只是使用实例,使用的镜像image都已经在我的本地拉取好了,如果你也照做的话会报错的,因为你本地没有这些镜像

2、启动编排的容器服务组
# 在docker-compose.yml文件所在目录执行
docker-compose up -d
3、到这里就启动了一组docker容器,可以通过docker ps -a查看

 

三、Dockerfile方式

Dockerfile用于构建单个镜像,在Dockerfile中可以通过FROM、RUN、COPY、ADD、EXPOSE、CMD等命令定制一个自己想要的docker镜像。

1、编写Dockerfile
FROM swoft/alphp:fpm
EXPOSE 18306 18307 18308 18309

注:该Dockerfile会构建一个以swoft/alphp:fpm 为基础镜像的镜像,开放18306 18307 18308 18309端口

2、构建镜像
# 在Dockerfile所在目录执行
docker build -t swoft .

# 在构建时可以指定版本号,也就是docker images查看结果
docker build -t swoft:version_1 .

# 如果当前目录有多个Dockerfile,也可以同时指定构建使用的Dockerfile
docker build -t test:version_1 -f ./Dockerfile2 .

注:

-t: 镜像的名字及标签,通常 name:tag 或者 name 格式

-f :指定要使用的Dockerfile路径;

后面一定要跟一个.,这里的这个点的作用是指定构建上下文路径。

docker会使用我们指定的这个上下问路径进行构建镜像,如果是使用远程的Dockerfile,则不能有这个点,比如 docker build -t test:version_1 github.com/creack/docker-firefox

3、创建容器

上面我们通过自己编写Dockerfile定制了一个镜像,下面我们就是创建容器了。

docker run -itd --name swoft  swoft/alphp