Docker极简教程 【高级】

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Docker极简教程 【高级】

1.Registry介绍

Registry 是镜像仓库,我们可以从镜像仓库中拉取一些镜像到本地,也可以提交镜像到仓库。

一些术语:

ENGLISH 中文
host 宿主机
image 镜像
container 容器
registry 仓库
daemon 守护程序
client 客户端

与registry仓库的交互:

查找镜像

docker search whalesay


拖取镜像

docker pull whalesay


推送镜像

docker push myname/whalesay


国内的docker镜像仓库:


  1. daoclou
  2. 时速云
  3. aliyun


2.Registry实战


1.查找镜像


image.png


STARS可以理解为点赞数,默认是按照这个排序的。


2.拉取镜像


image.png


3.查看镜像


image.png


可以看到,REPOSITORY是镜像名,TAG是默认的latest,正常情况是版本号,这两个比较重要。


CREATED是创建时间,SIZE是占用空间的大小。


4.运行镜像


image.png


5.标记镜像

使用docker tag命令标记本地镜像,将其归入某一仓库。

docker tag docker/whalesay myhaleasy:tag


image.png

6.上传镜像


可以使用docker push命令上传本地镜像到仓库,但是需要注册登


image.png


注册登录地址:https://hub.docker.com

执行登录命令,输入用户名与密码即可。

docker login


image.png


上传镜像前还需要在Docker官网个人中心创建该镜像。


3.Compose多容器应用


Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。


docker-compose 安装


1.Mac/Windows:


安装docker的时候附带安装了。


2.Linux:


curl https://github.com/docker/compose

Linux安装


执行命令


curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose


该命令会下载文件到(>)/usr/local/bin/docker-compose,在下载地址中使用$(uname -s)是获取 unmae -s 命令的输出加到路径中。


下载完成后,可以设置该目录的权限为777,意为所有人都可以读写该目录,最后使用 docker-compose --version 检查是否安装成功。


image.png


4.Compose搭建博客网站


接下来我们使用docker-compose搭建一个含nginx+ghost+db的博客网站。


1.准备


首先创建如下目录结构:

ghost
  - ghost
    - Dockfile
    - config.js
  - nginx
      - nginx.conf
      - Dockfile
  - data
  - docker-compose.yml


每个文件的具体内容有:


ghost/ghost/Dockfile


过时的配置(不使用)

FROM ghost
COPY ./config.js /var/lib/ghost/config.js
EXPOSE 2368
CMD ["npm","start","--production"]


最新版的官方镜像, 把配置文件改到/var/lib/ghost/content/ ,然后注释掉了 CMD["npm","start","--production"] 即可。


FROM ghost
COPY ./config.js /var/lib/ghost/content/ 
EXPOSE 2368


ghost/ghost/config.js


var path = require('path'),
    config;
config = {
    production: {
        url: 'http://mytestblog.com',
        mail: {},
        database: {
            client: 'mysql',
            connection: {
                host: 'db',
                user: 'ghost',
                password: 'ghost',
                database: 'ghost',
                port: '3306',
                charset: 'utf8'
            },
            debug: false
        },
        paths: {
            contentPath: path.join(process.env.GHOST_CONTENT, '/')
        },
        server: {
            host: '0.0.0.0',
            port: '2368'
        }
    }
};
module.exports = config;


ghost/nginx/Dockerfile

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80


ghost/nginx/nginx.conf

worker_processes 4;
events {worker_connections 1024;}
http {
    server {
        listen 80;
        location / {
            proxy_pass http://ghost-app:2368;
        }
    }
}


ghost/docker-compose.yml

version: '2'
networks:
  ghost:
services:
  ghost-app:
    build: ghost
    networks:
      - ghost
    depends_on:
      - db
    ports:
      - "2368:2368"
  nginx:
    build: nginx
    networks:
      - ghost
    depends_on:
      - ghost-app
    ports:
      - "80:80"
  db:
    image: "mysql:5.7.15"
    networks:
      - ghost
    environment:
      MYSQL_ROOT_PASSWORD: mysqlroot
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghost
    volumes:
      - $PWD/data:/var/lib/mysql
    ports:
      - "3306:3306"

此处数据库相关的配置要和config.js中的配置(user、password)保持一致。


一旦我们为一个服务指定了一个名字(db),它就可以被其它服务所解析。


nginx 中proxy_pass 设置成 http://ghost-app:2368 也是因为在docker-compose.yml 指定了服务是ghost-app。


2.启动


将所有容器启动,并以daemon的方式后台运行。第一次不需要build,因为会自动创建镜像。


docke-compose up -d

3.查看应用
docker-compose ps


image.png


因为文件内容输入有误,导致启动未成功,修改文件后还需要停止、删除掉容器再重新构建才行。


4.停止(+)


停止所有容器


docker-compose stop

5.删除(+)


删除时需要输入y手动确认


docker-compose rm

6.构建(+)


非首次运行就需要手动创建镜像了


docker-compose build


最后,在ghost目录下再次启动!


image.png


7.测试

访问域名进入搭建的博客网站,可以注册账号发布博客。


image.png


关于ghost的使用这里不做过多介绍。


5.docker-compose.yml常用命令

命令 用途
build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 暴露端口
volumes
image pull镜像
up 启动服务
stop 停止服务
rm 删除服务中的各个容器
logs 观察各个容器的日志
ps 列出服务相关的容器


6.Docker资源链接


Docker官方英文资源

docker官网:

http://www.docker.com


Docker中文资源

Docker中文网站:

https://www.docker-cn.com/

Docker安装手册:

https://docs.docker-cn.com/engine/installation/


Docker 国内镜像

网易加速器:

http://hub-mirror.c.163.com

官方中国加速器:

https://registry.docker-cn.com

ustc的镜像:

https://docker.mirrors.ustc.edu.cn

daocloud:

https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
185 0
|
1月前
|
Oracle 关系型数据库 数据库
|
3月前
|
关系型数据库 MySQL 数据库
百度搜索:蓝易云【【Docker】Docker部署Mysql并设置数据持久化教程】
通过以上步骤,您已经成功地在Docker中部署了MySQL,并设置了数据持久化,确保数据在容器重新启动或迁移时得以保留。
50 0
|
3月前
|
安全 应用服务中间件 nginx
百度搜索:蓝易云【使用Debian、Docker和Nginx部署Web应用教程】
这些是在Debian上使用Docker和Nginx部署Web应用的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
45 0
|
3月前
|
Docker 容器
百度搜索:蓝易云【docker容器/etc/hosts文件修改教程】
现在,你已经成功修改了Docker容器中的 `/etc/hosts`文件,添加了主机名和IP地址的映射关系。这使得在容器内部可以使用指定的主机名来访问相应的IP地址。请确保在修改 `/etc/hosts`文件时小心,避免错误的配置导致意外的问题发生。
119 0
|
4月前
|
应用服务中间件 网络安全 nginx
百度搜索:蓝易云【docker搭建nginx教程】
现在,你的Nginx容器已经成功运行。你可以通过访问服务器的IP地址或域名来访问Nginx服务。请确保服务器的防火墙允许访问80端口。
68 0
|
3月前
|
大数据 数据管理 Docker
【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解
【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解
241 0
|
6天前
|
Ubuntu Docker 索引
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
30 0
|
30天前
|
jenkins Java 持续交付
Docker搭建持续集成平台Jenkins最简教程
Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。
115 2
|
1月前
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
85 0