嘎里三分熟
  • 首页
  • JMusic
  • TSBay
  • 常用工具
  • About Me
  • 留言板
一行代码一世浮生
  1. 首页
  2. 技能
  3. 正文

docker常用技巧

2017年11月24日 2299点热度 5人点赞 0条评论

本文不介绍docker,只记录自己玩 docker 过程中碰到的一些坑和一些常用的操作。

给个参考文档链接:传送门

一、踩坑记

    1)碰到的第一个大坑

就是启动容器的时候碰到的,找了好久的错误原因,一直在防火墙端找原因,最后发现,是需要将 docker 重启下,然后 iptables -save 即可。

错误如下:

[root@iZuf64xswj2tx8htjph7evZ ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/gogs/gogs   latest              52cda4ee19a5        13 days ago         138.4 MB
docker.io/percona     latest              9b84b010bb1a        2 weeks ago         393.6 MB
[root@iZuf64xswj2tx8htjph7evZ ~]# docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona
0987f4a3f1677102b7aab58490e2ed6ecd1557dc17e6591f3f0e8d3fe91b9634
[root@iZuf64xswj2tx8htjph7evZ ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0987f4a3f167        percona             "docker-entrypoint.sh"   11 seconds ago      Created                                 percona
[root@iZuf64xswj2tx8htjph7evZ ~]# docker start percona
Error response from daemon: driver failed programming external connectivity on endpoint percona (53c8c06350100d9218b53cbcaf834df1d7e21739205602d249a3bf1093d031ba): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)
Error: failed to start containers: percona

    2)docker 安装 gogs

制作容器:docker create --name=gogs -p 10022:22 -p 10080:3000 -v /data/gogs:/data --link percona:percona gogs/gogs

(上述,命令中的 link 意思是和同样是用 docker 启动的数据库进行连接)

然后正常启动,正常访问   ip:10080,第一次访问需要在界面进行配置,但是重启 gogs 这个容器之后,再使用 ip:10080 就访问不了,尴尬。

最后反复研究,发现,其实是在页面配置的时候配置错了,看官网文档,如下:

原因是 HTTP port 配置错了,以为是填写服务器映射的端口10080,其实是填写 docker 内部的端口 3000。

所以,还是要看官方文档才最靠谱。

docker04.png

    3)docker 安装 wordpress

顺势将云虚拟主机上的WordPress 迁移到此,迁移很简单,

step1,备份数据库至新安装的percona;

step2,将原来的WordPress 全部文件复制至服务器 /data/wordpress/www/

step3,安装wordpress,docker run --name wordpress --link percona:percona -p 8888:80 -v /data/wordpress/www:/var/www/html -d wordpress

下面就是踩过的两个天坑,

① 需要修改配置文件  wp-config.php 里面的数据库连接,如图:注意此处的数据库 host,不能写类似 127.0.0.1 之类的本地ip,要么写对外的数据库地址,要么写 percona,why?因为写 localhost 的话会映射镜像内部 localhost,所以需要填写宿主机的 ip 或者外部 ip,或者是 --link 中指定好的 percona。

001.png

② 如果域名有变更的话,也要记得去数据库修改下域名信息,我们采用了 nginx 做了反向代理,所以要使用域名来访问,但是发现,只有主页和后台可以访问,其余全部都是 404,

002.png

后来反复研究,原以为是 Apache 和 Nginx 伪静态的设置不一致造成的,其实不是,后来在后台想直接升级 wordpress,发现提示要提供 ftp 信息,后来才发现,是挂在目录的权限设置没到位,只需下面一行语句轻松搞定:

docker exec wordpress chown -R www-data:www-data /var/www/html

或者进入交互端进行操作:

docker exec -i -t wordpress bash

chown -R www-data:www-data /var/www/html

二、操作

    1)安装

推荐 Ubuntu 系统,但是我是装在 Centos7 上面的,所以下文所有操作都是在 Centos 7上,在6上面安装会有很大的坑。

安装:yum install -y docker

查看版本:docker version

重启服务:service docker restart

    2)镜像

列出所有镜像:docker images

删除镜像:docker rmi [镜像名/image id]

下载镜像:docker pull mysql

或者 docker pull mysql:5.7 mysql

后面可以加版本号和重命名

搜索镜像:docker search mysql

    3)镜像加速(仓库)

默认 pull 的是从官方的仓库,在国内,可以找一个更快的国内源,如阿里云的:https://dev.aliyun.com/search.html

两种方式:

① 直接从指定仓库 pull

如:docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7

② 在阿里云的容器服务内(https://cr.console.aliyun.com/#/accelerator),我们可以查到阿里云的docker镜像加速器的使用,以下是我个人的加速器配置,

前提是,Docker客户端版本大于1.10.0

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

         sudo mkdir -p /etc/docker
     sudo tee /etc/docker/daemon.json <<-'EOF'
     {
        "registry-mirrors": ["https://6jbywkhi.mirror.aliyuncs.com"]
     }
     EOF
     sudo systemctl daemon-reload
     sudo systemctl restart docker

    4)容器

查看所有容器:docker ps -a

查看正在运行的容器:docker ps

创建容器:docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona

说明:--name 是命名这个容器,-v 是指定数据卷(本机:容器),-p 端口映射(本机实际:docker内),-e 参数设置,最后一个percona是镜像的名字

启动/停止/重启容器:docker start/stop/restart [容器名]

创建并启动容器:docker run -d ...

进入容器:docker exec -it imageName /bin/bash

查看日志:docker logs -f imageName

    5)镜像制作

需求:springboot 打包了一个 jar 程序,现在要使用 docker 制作一个镜像来运行这个程序。

实现:

① 创建项目用的文件夹并上传 jar 包至此文件夹内

docker01.png

② 制作关键文件 Dockerfile

vim Dockerfile

内容如下:

            FROM java:8
      COPY ./wechat-0.0.1-SNAPSHOT.jar /wechat/wechat-0.0.1-SNAPSHOT.jar
      COPY ./app-entrypoint.sh /
      RUN chmod +x /app-entrypoint.sh
      EXPOSE 9092
      
      ENTRYPOINT ["/app-entrypoint.sh"]

说明:

FROM:基础镜像是 java 的 8 版本(因为我们运行 jar 程序需要 java 运行环境)

COPY:将当前文件夹下的 jar 包 复制到 镜像中的 /wechat/ 目录下

COPY:将当前目录下的部署程序的shell脚本上传到 / 目录下

RUM: 赋予权限,然后运行我们上传的运行脚本

EXPOSE:docker 容器暴露出来的 端口

ENTRYPOINT: 入口,即docker 启动之后执行的脚本

③ 制作启动脚本

vim app-entrypoint.sh

内容如下:

            #!/bin/bash
      java -jar /wechat/wechat-0.0.1-SNAPSHOT.jar

说明:

第一行么就是 sh 脚本必备的,第二行就是执行 jar 程序必须的操作

④ 关键:镜像制作

由于我们当前目录下只有上文提到的三个文件,如下图:

docker02.png

执行: docker build -t wechat:1.0.0 .

说明:wechat:1.0.0 是自定义的镜像的名字和版本

. 就是代表当前文件夹下的所有文件

docker images 便可以看到我们的镜像了

⑤ 创建容器并允许

docker create --name wechat -t -p 9092:9092 wechat:1.0.0

docker start wechat && docker logs -f wechat

docker ps 便可以查看所有正在允许的镜像

    6)镜像推送到仓库

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: docker gogs images jar Linux mysql SpringBoot wordpress 容器 镜像
最后更新:2019年11月03日

GoldenJet

爱折腾技术的90后漫威小死忠程序员一枚

点赞
下一篇 >

文章评论

取消回复

通过电子邮件订阅博客

分类目录
  • BootStrap (2)
  • Bug集中营 (6)
  • Java web (3)
  • JavaScript (7)
  • Java基础 (17)
  • Java工具 (5)
  • Linux (3)
  • Python (3)
  • SpringBoot (14)
  • Spring基础 (8)
  • thymeleaf (1)
  • 娱乐 (3)
  • 小谈 (2)
  • 常用工具 (7)
  • 技术分析集 (5)
  • 技能 (10)
  • 源码 (4)
  • 科普类 (1)
  • 算法 (9)
  • 踩坑记 (5)
文章归档
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年4月 (2)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年11月 (1)
  • 2019年10月 (1)
  • 2019年9月 (1)
  • 2019年8月 (1)
  • 2019年7月 (2)
  • 2019年5月 (2)
  • 2019年4月 (2)
  • 2019年3月 (3)
  • 2019年2月 (2)
  • 2019年1月 (2)
  • 2018年12月 (2)
  • 2018年11月 (3)
  • 2018年10月 (3)
  • 2018年9月 (2)
  • 2018年8月 (3)
  • 2018年7月 (2)
  • 2018年5月 (1)
  • 2018年4月 (3)
  • 2018年3月 (2)
  • 2018年2月 (3)
  • 2018年1月 (5)
  • 2017年12月 (2)
  • 2017年11月 (3)
  • 2017年10月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (7)
  • 2017年6月 (5)
  • 2017年5月 (1)
  • 2017年4月 (2)
  • 2017年3月 (4)
  • 2017年2月 (2)
小伙伴友链
  • 前端驿站

COPYRIGHT © 2017-2020 嘎里三分熟. ALL RIGHTS RESERVED.

浙ICP备17005575号-1

浙公网安备 33010802009043号