docker --镜像 --容器 --docker-compose 编排 跑lampWordPress和postgres
docker --镜像 --容器 --docker-compose 编排 跑lamp,WordPress和postgres
docker的基础知识本文就不说了,docker的三要素是镜像,容器,仓库,这三者形成了一个完整的闭环,当然,环的源头是仓库,各种各样的仓库,比如官方仓库,私有仓库,公有云仓库,自己搭建的私人harbor仓库等等,仓库里存放的是已经由前辈通过go语言制作好了的基础镜像或者是自己通过dockerfile将基础镜像改装而成的适于自己需求的镜像,而我们通过docker这个平台运行镜像就得到了容器,容器是有唯一ID的可运行的镜像,可以理解为镜像的影分身。正是如此,我们才可以方便的通过一个镜像复制出n多个容器,而这些容器又通过特定的规则连接到一起,从而组成一个闭环,这样集群(包括分布式集群)的搭建就非常容易了。
这里提到了一个概念,基础镜像,这个是我们学习的目标,基础镜像的制作并不在我们学习的范围。
本文的实验目标:
1,通过两个官方提供的基础镜像,MySQL5.7版本,WordPress5.5.3。pull(从官方仓库拉取)这两个镜像到本地后,通过docker-compose 编写启动文件管理这两个镜像的启动。
2 ,通过官方提供的postgre的基础镜像,启动这个镜像,pgadmin可以连接到这个容器,并新建数据库。
环境介绍:
使用的是vm的虚拟机,centos,版本为7,docker-ce已经通过yum安装完毕,docker服务已启动,官方仓库已更改为阿里云仓库(提高速度,国外pull镜像太慢了,本地化一下没毛病)
在提醒一次,防火墙和selinux 要么设置好放行服务,要么就关闭它们(我是关闭状态)、
实验1:
MySQL的版本为5.7.18,从网易云拉取的,命令为:
[root@centos6 ~]# docker pull hub.c.163.com/library/mysql
Using default tag: latest
latest: Pulling from library/mysql
42cb69312da9: Already exists
e2cf5467c4b5: Already exists
871ec0232f66: Already exists
3c0ae7ec690d: Already exists
d39b43089b70: Already exists
aa0e7cb4b67c: Already exists
738db9902d06: Already exists
ae333863ac05: Already exists
6d014992204a: Already exists
09aeca0c9a82: Already exists
0162083b2de0: Already exists
Digest: sha256:b2bce1a792237ac5df78877d583f34b09ab023a77130921a6bcce67ce2d24ff0
Status: Image is up to date for hub.c.163.com/library/mysql:latest
hub.c.163.com/library/mysql:latest
WordPress从官方拉取的,命令为:
[root@centos6 ~]# docker pull wordpress:latest
latest: Pulling from library/wordpress
Digest: sha256:92e97d9b3147038e3cc541a224cc951bef597061827e23a208a24c36bff1c1fe
Status: Image is up to date for wordpress:latest
docker.io/library/wordpress:latest
docker-compose的安装:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose#就一个文件,赋予权限即可运行,上面的命令是下载它到系统的path路径了,因此不要疑惑,赋权就可以使用了
编写编排文件,文件必须使用yaml语言编写(变态的格式对齐要求),因此任意名称都可以,后缀为yaml即可(为yml也可以),内容如下(我使用的名字为lamp.yaml):
version: "2.2"#docker-compose的版本,2.2 或者3 或者3.3都可以
services:#定义服务的地方
db:#服务名称为db
image: hub.c.163.com/library/mysql#使用的镜像名称,通过docker images 命令可以查到
volumes:
- db_data:/var/lib/mysql#该MySQL使用的存放数据库的路径,注意,这个路径是镜像内的路径。
restart: always#如果mysqldown了就尝试重启容器
environment:
MYSQL_ROOT_PASSWORD: P@ssW0rd#这个mysql服务的root密码
MYSQL_DATABASE: wordpress#启动mysql后使用的数据库名称为wordpress,如果没有就立刻新建
MYSQL_USER: wordpress#连接MySQL数据库使用的账号
MYSQL_PASSWORD: wordpress123456#该账号的密码
wordpress:#服务名称为WordPress
depends_on:#WordPress关联上面的服务
- db#关联的服务名称
image: wordpress:latest#指定镜像名称
ports:
- "8000:80"#暴露端口,容器内的端口是80,对外端口是8000,可以任意修改,只要没被占用
restart: always
environment:
WORDPRESS_DB_HOST: db:3306#WordPress这个服务连接的服务
WORDPRESS_DB_USER: wordpress#使用WordPress这个账号连接
WORDPRESS_DB_PASSWORD: wordpress123456#这个账号的密码
volumes:
db_data:#持久化到本地。
通过上面的文件启动容器,以提供服务:
[root@centos6 ~]# docker-compose -f lamp.yaml up -d
Creating network "root_default" with the default driver
Creating root_db_1 ... done
Creating root_wordpress_1 ... done
查看容器状态,可以看到两个容器都是up状态,端口也都暴露了,服务已经可以使用了。此时,局域网内任意浏览器连接容器+port即可安装并使用WordPress了。
[root@centos6 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e663bd63a37 hub.c.163.com/library/mysql "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 3306/tcp root_db_1
ce0c57eba1ce wordpress:latest "docker-entrypoint.s…" 20 minutes ago Up 18 seconds 0.0.0.0:8000->80/tcp root_wordpress_1
本实验完美成功。
实验2:
postgres镜像仍然是从官方拉取(已下载过了)。
[root@centos7 ~]# docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
Digest: sha256:839d6212e7aadb9612fd216374279b72f494c9c4ec517b8e98d768ac9dd74a15
Status: Image is up to date for postgres:latest
docker.io/library/postgres:latest
查看镜像的状态:
[root@centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
poster v1.0 f51c55ac75ed 10 days ago 314MB
postgres latest f51c55ac75ed 10 days ago 314MB
image id 可以看到,两个镜像是一致的,因为我改了tag。
编写镜像运行文件,名称任意,内容如下(我使用的名字为postgres.yaml):
version: '3'
services:
db:
restart: always
image: f51c5 #可以使用镜像id前5位指定,也可以使用镜像名称+版本号的形式,就是postgres:latest
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: postgres #连接的密码pgadmin用的就是这个哦
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- /home/server/pg_data/data:/var/lib/postgresql/data/pgdata
#持久化的目录,:左侧是本地目录,右侧是容器的目录
根据以上文件启动容器:
[root@centos7 ~]# docker-compose -f postgres.yaml up -d
Creating root_db_1 ... done
查看容器状态:
[root@centos7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ba7ff3a9b6d f51c5 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp root_db_1
[root@centos7 ~]#
服务端口也是暴露的,status为up,(只有up是正常的,exit或者reboot等等是表示容器启动失败的。)
启动pgadmin,连接容器内的数据库:
数据库映射到了本地哦
[root@centos7 data]# pwd
/home/server/pg_data/data
[root@centos7 data]# ll
total 60
drwx------ 5 polkitd ssh_keys 41 Nov 28 15:45 base
drwx------ 2 polkitd ssh_keys 4096 Nov 28 18:10 global
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_commit_ts
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_dynshmem
-rw------- 1 polkitd ssh_keys 4782 Nov 28 15:45 pg_hba.conf
-rw------- 1 polkitd ssh_keys 1636 Nov 28 15:45 pg_ident.conf
drwx------ 4 polkitd ssh_keys 68 Nov 28 18:05 pg_logical
drwx------ 4 polkitd ssh_keys 36 Nov 28 15:45 pg_multixact
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_notify
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_replslot
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_serial
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_snapshots
drwx------ 2 polkitd ssh_keys 6 Nov 28 16:17 pg_stat
drwx------ 2 polkitd ssh_keys 63 Nov 28 18:15 pg_stat_tmp
drwx------ 2 polkitd ssh_keys 18 Nov 28 15:45 pg_subtrans
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_tblspc
drwx------ 2 polkitd ssh_keys 6 Nov 28 15:45 pg_twophase
-rw------- 1 polkitd ssh_keys 3 Nov 28 15:45 PG_VERSION
drwx------ 3 polkitd ssh_keys 60 Nov 28 15:45 pg_wal
drwx------ 2 polkitd ssh_keys 18 Nov 28 15:45 pg_xact
-rw------- 1 polkitd ssh_keys 88 Nov 28 15:45 postgresql.auto.conf
-rw------- 1 polkitd ssh_keys 28043 Nov 28 15:45 postgresql.conf
-rw------- 1 polkitd ssh_keys 36 Nov 28 18:05 postmaster.opts
-rw------- 1 polkitd ssh_keys 101 Nov 28 18:05 postmaster.pid
实验目标圆满完成~~~~~~~~~
相关文章
- Docker实践:部署Redis容器
- Docker - 构建镜像:使用docker commit命令
- 关于docker容器和镜像的区别
- 【阿里云资讯】Docker首个国内合作商,阿里云何以认定容器技术将成主流?
- 不进docker容器修改文件
- Docker - 创建支持SSH服务的容器镜像
- Docker 核心概念:镜像、容器、仓库,架构核心设计理念
- Docker 基础操作 容器自启动 删除镜像和删除容器
- docker安装最新版Jenkins:拉取镜像/创建容器
- Docker的三种网络代理配置:dockerd pull镜像代理;容器docker run网络代理;docker build代理--build-arg
- docker 每次都得source /etc/profile以及如何查看Docker容器环境变量、向容器传递环境变量
- docker --link容器互联
- Docker镜像分层和临时容器
- Docker创建Dockerfile脚本构建jdk1.8镜像并启动容器示例
- docker重启容器命令
- Docker使用阿里云docker镜像加速
- 为什么不需要在 Docker 容器中运行 sshd
- 004-docker命令-docker资源配置-Docker容器CPU、memory资源限制
- 78.第十七章 企业级容器技术docker -- Docker 镜像制作和管理(六)
- 73.第十七章 企业级容器技术docker -- docker介绍和安装(一)
- y23.第二章 Docker从入门到精通 -- docker 的资源限制(五)
- 【Linux之shell脚本实战】批量上传docker镜像到华为云容器镜像仓库
- 提交生成镜像 上传本地镜像 上传本地docker镜像 docker push上传镜像 docker commit上传容器
- 理解了镜像和容器,你就掌握了Docker的80%
- Net Core 微服务 - 如何在docker容器里运行一个简单的.net core web api 服务
- docker修改容器内nginx配置文件
- Docker----如何更改docker镜像的存储路径
- 【Docker】如何将已有的容器打为镜像???
- docker修改容器的端口、容器名、映射地址......
- Docker学习笔记17:docker实例之安装 Node.js、PHP、MySQL、Tomcat、Python、Redis、MongoDB、Apache
- 从docker容器时间问题探究到Namespace问题
- 手动构建自己的docker容器镜像实战
- docker 使用 GPU 安装Nvidia Docker