从零开始的Docker学习

DOCKER 灵活部署我的编译环境

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

事实上,docker并没有那么神秘,他的效果就和虚拟机一样,只是消耗更少的系统资源,更快的运行速度。

安装docker

由于GFW的存在,我们直接按照docker官网的操作,基本不是很慢就是根本下不了:fire:(生气)。

所以我们要用国内的镜像,我选了清华开源镜像库的,文件新而且快。

跟着链接中的安装提示做就好了,代码就不贴了。

配置一个docker加速器

同样因为GFW的存在,docker pull 命令会很慢,我们可以前往Docker加速器.
如果你没有daocloud的账号,你需要注册一个,因为你会需要加速器的

了解docker的基础命令

  • 我常用的一些命令
# 本机环境 pop-os 18.04 基于Ubuntu 18.04
docker login                   登陆你的docker hub账户
docker pull                    默认先从本地拉取镜像,如果没有同名镜像,前往docker hub拉取
docker push                    提交你的镜像,需要先使用docker login。提交后,即使本地没了仍可以直接从账户中拉取到。
docker images                  查看你本地的镜像
docker ps                      查看你现在运行的容器,使用-a 可以查看所有存在的container
docker start                   启动一个未启动的容器
docker attach                  进入一个启动的容器
docker kill                    结束一个启动的容器
docker rmi                     删除一个存在的镜像
docker rm                      删除一个存在的容器

了解这些命令基本就可以利用docker来配置每个项目独特的运行环境了。
如果需要查看更多命令,可以在命令行中输入docker查看或使用搜索。:P

使用镜像

  • 我这里使用alpine来举例子,配置一个django project
docker pull alpine
# 等待下载完成,alpine非常小,大概就4MB多.基本一个ubuntu的image要120MB
docker images
  • 你可以看到打印出的images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
alpine                 latest              11cd0b38bc3c        2 weeks ago         4.41MB
  • 接着你可以使用这个image,搭建你的项目运行环境
docker run -ti --rm -p 5000:5000 -v ~/Stephen-Ling/演示/:/srv/演示/ --name test alpine
-t                   tty
-i                   交互界面,提供命令行使用
-p                   映射端口 本机端口:容器的端口
-v                   映射目录 本机目录:容器内目录,确保本地目录存在,否则无效果
--rm                 容器停止后自动删除,因为演示用,不用保存
--name               容器命名方便在列表里找到
  • 进入容器后,先安装nano,python3,python3-pip.这里应该要更换源,否则基本安装不上了。不得不说GFW 666 :P
apk add nano python3
  • 使用pip安装django
pip3 install django
  • 使用django创建一个project
cd /演示目录
python3 -m django startproject test
  • 得到你的django project 目录
/演示目录/test # ls
manage.py  test

DockerFile

我们一般配置的环境都希望可以重复使用,而不应该为换电脑等等事情丢失配置。装电脑超级麻烦:cry:

所以我们使用docker commit 命令可以将你的容器保存成镜像。

docker commit              将一个容器保存成镜像

但是我们的镜像并不能直接修改。如果你要修改,恭喜你。你先需要运行,在里面安装,经过一系列操作,再次commit。

为了避免这个麻烦,所以我们需要dockerfile来配置环境:
1. 直观
2. 随时可以修改配置
3. 更加利于保存,直接github一下你的dockerfile
4. 方便与别人分享

为了加深理解,我用dockerfile配置一个postgres数据库举个例子。

# 整个配置dockerfile的目录结构
├── Dockerfile                         #dockerfile文件
├── entrypoint_postgres.sh             #要在进入容器时执行的shell脚本
├── postgres_configure                 #postgresql数据库配置
│   ├── pg_hba.conf                    #类似防火墙配置,拒绝配置以外ip请求访问
│   ├── postgresql.conf                #主设置
│   ├── root.key                       #用于ssl远程登陆的
│   ├── server.crt                     #同上
│   └── server.key                     #同上
└── settings.sh

1 directory, 8 files
  1. apk镜像地址配置,apk是alpine的包管理
# 清华开源镜像
https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.8/main/
https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.8/community/
  1. DOCKERFILE
FROM ALPINE:V3.8                                   #拉取这个镜像(默认先拉取本地)
MAINTAINER Stephen Ling "[email protected]"        #维护人员信息/作者信息(非必要)

EXPOSE 5432                                         #开放5432端口

COPY ./apk/repositories /etc/apk/repositories       #添加国内镜像地址 复制粘贴 本地位置:容器内位置

RUN apk add postgresql

ADD ./entrypoint_postgres.sh /root/entrypoint_postgres.sh
ADD ./settings.sh /root/settings.sh
ADD ./postgres_configure/postgresql.conf /root/postgresql.conf
ADD ./postgres_configure/pg_hba.conf /root/pg_hba.conf

CMD ["/bin/bash", "/root/entrypoint_postgres.sh" ]             #要在进入容器时可以输入这个命令 /bin/bash /root/entrypoint_postgres.sh 则进入时直接执行这个shell脚本了。
  1. postgresql.conf
# 配置文件内容很多,展示一些必要操作。
listen_addresses = '*'              # 表示监听所有地址的请求,否则只能本地了。
port = 5432             # 端口号
  1. pg_hba.conf
# host 表示 一个空白的或者ssl tcp/ip socket
# all  表示 操作的数据库
# all  表示 访问数据库的用户
# 127.0.0.1/32 表示 本机
# trust 表示 使用密码登陆不用加密
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
  1. entrypoint_postgres.sh
#!/bin/bash

mkdir /usr/local/pgsql/
mkdir /usr/local/pgsql/data
mkdir /usr/local/pgsql/log
touch /usr/local/pgsql/log/logfile.log

chown -R postgres:postgres /usr/local/pgsql/data
chown -R postgres:postgres /usr/local/pgsql/log
chown -R postgres:postgres /root/settings.sh
chown -R postgres:postgres /root/
chmod 777 /root/settings.sh

su - postgres -c "/usr/pgsql-10/bin/initdb -D /usr/local/pgsql/data"            # 使用postgres身份登陆 初始化postgres数据库,并设置数据存放位置
su - postgres -c "/usr/pgsql-10/bin/pg_ctl -D /usr/local/pgsql/data -l             /usr/local/pgsql/log/logfile.log start"        # 使用postgres身份登陆 启动postgres数据库,并设置数据存放位置和日志目录

su - postgres -s /root/settings.sh        # 为数据库用户改密码,至于调用另一个shell脚本,纯粹是为了方便之后修改维护用。

su - postgres -c "/usr/pgsql-10/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/logfile.log stop"

cp /root/postgresql.conf /usr/local/pgsql/data/postgresql.conf

cp /root/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf

su - postgres -c  "/usr/pgsql-10/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/logfile.log start"

tail -f /usr/local/pgsql/log/logfile.log    #持续输出日志文件。
  1. settings . sh
#!/bin/bash

psql -c "alter role postgres with password '123456aa';"                        # 因为默认的postgres用户就是postgres,直接进入改个密码就好了。

猜你喜欢

转载自blog.csdn.net/qq_35104586/article/details/81175925
今日推荐