本次测试均使用阿里云的试用产品 https://free.aliyun.com/?crowd=personal
linux下docker的安装 #
- 安装命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 查看信息
[root@iZ2zefgusws66mismamte8Z ~]# docker version
Client: Docker Engine - Community
Version: 24.0.5
API version: 1.43
Go version: go1.20.6
Git commit: ced0996
Built: Fri Jul 21 20:39:02 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.5
API version: 1.43 (minimum version 1.12)
Go version: go1.20.6
Git commit: a61e2b4
Built: Fri Jul 21 20:38:05 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.22
GitCommit: 8165feabfdfe38c65b599c4993d227328c231fca
runc:
Version: 1.1.8
GitCommit: v1.1.8-0-g82f18fe
docker-init:
Version: 0.19.0
GitCommit: de40ad0
- 启动docker
systemctl start docker
创建容器 #
- 创建一个php7.4+nginx1.20的容器,启动80端口,访问
101.201.45.61
输出hellow world
- 下载镜像
docker pull nginx:1.20
docker pull php:7.4-fpm
[root@iZ2zefgusws66mismamte8Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php 7.4-fpm 38f2b691dcb8 9 months ago 443MB
nginx 1.20 0584b370e957 15 months ago 141MB
- 创建容器
# 创建一个php容器,宿主机目录/data/www为代码目录
docker run --name php74 -v /data/www:/www -v /usr/local/php74/conf/:/usr/local/etc/php/ -d php:7.4-fpm
# 创建一个nginx容器并连接到php的容器,不推荐用link,推荐用network
docker run --name nginx120 -p 80:80 -d -v /data/www:/usr/share/nginx/html -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/usr/share/nginx/logs --link php74:php nginx:1.20
- nginx的配置文件参考
server {
listen 80;
server_name 101.201.45.61;
root /usr/share/nginx/html;
index index.html index.htm index.php;
access_log /usr/share/nginx/logs/access.log main;
error_log /usr/share/nginx/logs/error.log error;
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
# 此处的php即为创建nginx容器时连接的php容器的名字
fastcgi_pass php:9000;
fastcgi_index index.php;
#此处的路径得是php容器的代码根目录
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
- 如果是阿里云的测试服务器,需要在安全组添加入方向的80端口规则
容器打包及部署 #
方式一:将容器打包并上传至镜像仓库,然后在需要的服务器使用docker pull
命令下载
方式二:将容器打包成一个tar包,然后将tar包上传至需要的服务器,然后docker load
命令加载
创建一个仓库 #
参考:https://help.aliyun.com/document_detail/612664.html?pipCode=acr&goodsId=936788
- 在阿里云上创建一个仓库
https://cr.console.aliyun.com/cn-beijing/instances
,创建一个个人仓库,创建了一个nginx
的仓库,namespace
是c_space
。 - 然后在服务器上登录到仓库
docker login --username=aliyunaccount registry.cn-beijing.aliyuncs.com
- 测试将之前下载的nginx镜像上传到阿里的仓库中
# docker tag [ImageId] registry.cn-beijing.aliyuncs.com/c_space/nginx:[镜像版本号]
docker tag nginx:1.20 registry.cn-beijing.aliyuncs.com/c_space/nginx:1.20
# docker push registry.cn-beijing.aliyuncs.com/c_space/nginx:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/c_space/nginx:1.20
- 以上将一个下载的公共镜像上传到了阿里的仓库中,下次使用可以直接从阿里的仓库中下载
# docker pull registry.cn-beijing.aliyuncs.com/c_space/nginx:[镜像版本号]
docker pull registry.cn-beijing.aliyuncs.com/c_space/nginx:1.20
将容器打包成为镜像 #
- 容器打包成镜像上传到仓库
# 命令:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# options选项:-a :提交的镜像作者;
# -c :使用Dockerfile指令来创建镜像;
# -m :提交时的说明文字;
# -p :在commit时,将容器暂停。
docker commit nginx120 registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
docker push registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
- 容器打包并打包成文件
# 命令:docker save -o 将要保存到本地的文件名 要保存的镜像
docker save -o /data/www/nginx-1200.tar registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
# 然后在/data/www目录下就可以看到一个nginx-1200.tar
在另外的服务器下载并运行 #
- 从仓库下载之前打包的镜像并运行
docker pull registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
docker run --name nginx1200 -p 80:80 -d -v /data/www:/usr/share/nginx/html -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/usr/share/nginx/logs --link php74:php registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
- 将导出镜像文件导入并运行
# 方法一、docker load < [image.tar_name]
# 方法二、 docker load --input [image.tar_name]
# 注意: docker load 不能指定镜像的名称
docker load --input /data/www/nginx-1200.tar
docker run --name nginx1200 -p 80:80 -d -v /data/www:/usr/share/nginx/html -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/usr/share/nginx/logs --link php74:php registry.cn-beijing.aliyuncs.com/c_space/nginx:1.200
使用docker-compose将多个容器一起打包 #
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。
docker-compose安装 #
# 安装命令,直接将二进制文件下载下来即可直接使用
curl -SL https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
docker-compose --version
# Docker Compose version v2.21.0
创建docker-compose.yml后进入到yml所在目录执行
docker-compose up -d
docker-compose.yml参考 #
注意:links不再推荐使用,可以用networks替代,两个容器需要指定相同的networks
version: '3' #docker-compose语法的版本
services:
nginx: #创建 nginx容器
image: registry.cn-beijing.aliyuncs.com/c_space/nginx:1.20 #用的之前创建的额阿里镜像仓库
ports: #映射 80端口到本机
- 80:80
volumes:
- /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d #把容器的nginx.conf映射到 ./nginx/nginx.conf,
- /data/www:/usr/share/nginx/html #把容器的/var/www 映射到./src
networks:
- php-nginx-net
php74: #创建 php的容器
# image: registry.cn-beijing.aliyuncs.com/c_space/php:7.400
build: ./dockerfile/
volumes:
- /data/www:/www #www目录映射
- /usr/local/php74/conf/:/usr/local/etc/php/ #把容器的 php.ini映射到 ./php/php.ini
networks: #此处创建
php-nginx-net:
aliases:
- php
networks:
php-nginx-net:
dockerfile #
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。