前言
经过前面一节的内容,我们已经做好了前置准备工作,这里我们来认识一些docker 中常用的命令,最后我们写一个脚本实现一键起一个redis服务,妈妈再也不用担心我搭环境的问题了。
温馨提示:
这里的操作搭建基于开发环境使用,很多地方考虑的不够全面,不能应用于生产实践,切记。
docker 命令介绍
这里着重看一些 docker 镜像和容器相关的命令,其他的命令暂不做介绍。
- 查找仓库中的镜像。
# 这里义nginx镜像为例
docker search nginx
- 下载镜像,查到我们需要的镜像以后,我们可以通过
docker pull [options] name [:tag@digest]
命令来下载该镜像。
#这里不加tage,默认下载 :latest(最新的)
docker pull nginx
- 查看本地镜像。
docker images
- 删除本地镜像。
# 通过指定镜像名称删除
docker rmi nginx
# 也可以通过指定镜像id删除,镜像id通过上面的 `docker image` 命令查看,镜像id是一个比较长的字符串,我们删除的以后只需要输入前面几位,docker可以找到就可以删除该镜像了,如:
docker rmi 3e4s
- 导出镜像。
docker save nginx > docker-nginx.tar
该命令执行完成以后,在当前目录下就可以看到一个 docker-nginx.tar 的文件。
6. 有导出也就有导入,使用 docker load
命令可以导入镜像。
docker load < docker-nginx.tar
- 启动容器,使用
docker run
命令来启动容器。
docker run nginx -p 80:80
执行完以上命令,不出意外的话,通过 访问 虚拟机地址,你可以看到如下一个页面
这证明我们的 nginx 服务已经正常起来了。
好了,关于 docker 的常用命令就介绍到这里了,接下来我们实现通过一个脚本一键启动一个 redis 服务。
#!/bin/bash
# 服务启动成功,打印参数信息
function printSuccessLog(){
echo "redis 服务启动完成"
cat <<EOF
容器id: $1
服务名: $2
端口号: $3
数据存储目录: $4
密码: $5
EOF
}
cat <<EOF
###################################################################
本脚本用于基于 docker 一键启动 redis 服务(前提是机器上已经安装好并
启动了docker服务),部分参数可配置,如果不想配置,可以一路回车,脚本
执行完成可以快速启动一个 redis 服务。
温馨提示:
本脚本仅仅适用于搭建开发环境,服务稳定以及数据安全性暂不考虑,
不可直接应用于生产环境,切记!
###################################################################
EOF
echo
echo
echo
NOW=`date +"%Y-%m-%d %H:%M:%S"`
echo "准备构建 redis 服务 $NOW"
echo "请输入服务名,该服务名用于以后快速启动停止或修改该服务,默认为 docker-redis"
read INPUT_IMAGE_NAME
if [ ! $INPUT_IMAGE_NAME ]
then
IMAGE_NAME=docker-redis
else
IMAGE_NAME=$INPUT_IMAGE_NAME
fi
echo "请输入端口号,该端口号用于客户端连接该服务,默认为 6379"
read INPUT_PORT
if [ ! $INPUT_PORT ]
then
PORT=6379
else
PORT=$INPUT_PORT
fi
echo "请输入 redis 的数据存储目录,该目录用于挂载服务的存储数据目录,防止容器重启以后数据丢失,默认为 /usr/local/data/redis"
read INPUT_DATA_LOCATION
if [ ! $INPUT_DATA_LOCATION ]
then
DATA_LOCATION=/usr/local/data/redis
else
DATA_LOCATION=$INPUT_DATA_LOCATION
fi
# 如果目录不存在,则新建该目录
if [ ! -d $DATA_LOCATION ]
then
mkdir -p $DATA_LOCATION
fi
echo "请输入 redis 的密码,默认为 123456"
read INPUT_PASSWORD
if [ ! $INPUT_PASSWORD ]
then
PASSWORD=123456
else
PASSWORD=$INPUT_PASSWORD
fi
NOW=`date +"%Y-%m-%d %H:%M:%S"`
echo "开始构建 redis 服务 $NOW"
docker pull redis
echo "停止旧的 $IMAGE_NAME 服务..."
docker stop $IMAGE_NAME
echo "删除旧的 $IMAGE_NAME 容器..."
docker rm $IMAGE_NAME
echo "开始启动新的 $IMAGE_NAME 服务..."
CONTAINER_ID=`docker run -itd --name $IMAGE_NAME -p $PORT:6379 -v $DATA_LOCATION:/data redis --appendonly yes --requirepass $PASSWORD`
CONTAINER_ID_PATTERN="^[0-9a-zA-Z]{64}$"
if [[ $CONTAINER_ID =~ $CONTAINER_ID_PATTERN ]]
then
echo "是否把 redis 服务设为开启自启?[Y/N] ,默认 Y"
read AUTO_START
if [[ $AUTO_START -eq "Y" ]]
then
docker update --restart=always $CONTAINER_ID
fi
printSuccessLog $CONTAINER_ID $IMAGE_NAME $PORT $DATA_LOCATION $PASSWORD
fi
如无意外的话,redis 服务已经起来了,可以简单测试
docker exec -it 7848 redis-cli
127.0.0.1:6379> get 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set 123 abc
OK
127.0.0.1:6379> get 123
"abc"
127.0.0.1:6379> exit
当然,redis 的配置文件也可以使用外部的文件,使用外部的配置文件挂载到 /etc/redis/redis.conf 即可。
使用脚本重新构建 reids 服务,发现刚才的数据还在,至此,一键搭建 redis 服务完成,可以使用 redis 桌面客户端工具连接 redis 愉快的玩耍了。
开发中,有了缓存数据库,关系型数据库几乎也是必不可少的,下节分享使用脚本一键跑个 mysql 服务。