31

常用Docker命令与小技巧

 4 years ago
source link: https://www.tuicool.com/articles/3QvQziB
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

安装脚本

Ubuntu / Centos

Debian的安装貌似有问题, 需要解决安装源的问题。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun / AzureChinaCloud
 

如果在海外的AWS或者GCP等云服务器厂商, --mirror 自然不需要加上去了。

Centos在运行完成之后, 还需要手动的 sudo systemctl start docker.service 否则会提示docker没有启动之类的错误

日志相关

Grep String

正确的姿势: docker logs nginx 2>&1 | grep "127."

比如查看Jupyter Notebook的token: docker logs notebook 2>&1 | grep "token"

其他支持的参数

-f : 类似tail -f 命令

--since : 从某个时间戳开始,比如 2013-01-02T13:23:37 也支持相对时间,比如: 42m

--until : 与上类似, 不过是反过来。

-t, --timestamp : 显示时间戳

--tail N(default all) : 显示最后几行数据

Mount的技巧

比如Grafana 等,在docker image之中自带一些文件。如果直接mount对应的目录并且host目录为空, 那么docker内部的目录就会被覆盖。如何处理这种情况呢?

简单粗暴的方法1:(思路only)

先运行一次, 然后使用 docker cp 命令将其复制出来

然后删除刚才的docker container, 将文件复制到对应的目录,再mount

更优雅一些的方法2:

以启动 ClickHouse 为例

# Step 1.1: 创建一个docker volume (目的: 把CH Server的配置暴露出来)
docker volume create --driver local \
    --opt type=none \
    --opt device=/home/centos/workspace/clickhouse/configs \
    --opt o=bind \
    ch-server-configs
 
# Step 1.2 : 创建volume , mount 数据库数据
docker volume create --driver local \
    --opt type=none \
    --opt device=/home/centos/workspace/clickhouse/data \
    --opt o=bind \
    ch-server-data
 
# Step 2 : 启动 (注意: 当存储数据较多的时候, 第二次启动,会花比较长的时间来初始化。 初始化结束之前尝试链接会失败。)
sudo docker run -d --name mkt-ch-server \
    -v ch-server-configs:/etc/clickhouse-server \
    -v ch-server-data:/var/lib/clickhouse \
    --restart always \
    -p 9000:9000 -p 8123:8123 \
    --ulimit nofile=262144:262144 yandex/clickhouse-server
 

这样docker镜像自带的配置文件就不会在第一次mount的时候被清空

定时任务

比如mysql需要定期导出数据备份。这个操作最好是利用宿主机的crond来完成

0 1 * * * docker exec mysqldump xxxx
 

常用Docker镜像及其安装命令

MySQL

安装

docker run --name some-mysql --restart always\
    -v /my/own/datadir:/var/lib/mysql\
    -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
 

Dump 数据

  • 方式1: 已经在本地有mysql docker container

    下面的命令是针对docker内部的mysql,也可以直接指定参数dump remote mysql

    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /path-to-data/all-databases.sql
     
    
  • 方式2 : 在本地还没有mysql docker container
    # 用完就删除,并在命令行提示输入密码
    docker run -i --rm mysql:5.7 mysqldump --all-databases\
    -h 172.17.0.1 -uroot -p | gzip -9 > /home/centos/workspace/mysql-data/backup.sql.gz
     
    

    编辑器原因, 上面 > 没有正确显示出来

Restore 数据

还是参考上面 Dump 的方式,只不过命令行工具改成了 mysql

Python Proxy

多多少少要搞一些爬虫吧。充分利用云服务器的IP用来做爬虫代理。目前发现最简单的爬虫代理搭建方法:

docker run --name py-proxy -d --restart always -p 8899:8899 abhinavsingh/proxy.py
 

注意:

  1. 截至目前位置, 这个docker镜像的python脚本还比较老,不支持basic auth. 如果需要basic auth, 需要自行更新python文件,并重新docker build才可以。Github地址: https://github.com/abhinavsingh/proxy.py
  2. 在实际生产之中, 用多了貌似有自动无法链接的情况。也可能是目标网站的问题。

  3. 这个东东也可以作为浏览器SwitchSharp的代理哦, 不过推荐加上https + basic auth. 具体操作请看官方文档。

Jupyter Notebook

用了一圈, 感觉还是 tensorflow 镜像自带的Notebook比较简单。 因为在mount host 目录的时候, 没有奇奇怪怪的权限问题。bash script 如下:

sudo docker run --name notebook -d --restart always \
    -p 127.0.0.1:8888:8888 \
    -v /path-to-workspace/notebooks:/tf \
    tensorflow/tensorflow:latest-py3-jupyter
 

如果还需要链接Apache Spark等,参考如下Script

sudo docker run --name pyspark-notebook -d \
    --net host --pid host -e TINI_SUBREAPER=true -p 8888:8888 \
    -v /path-to-workspace/notebooks:/tf \
    tensorflow/tensorflow:latest-py3-jupyter
 

Grafana

ID=$(id -u)
 
docker run \
  -d --restart always \
  -p 3000:3000 \
  --name=grafana \ 
  --user $ID -v /path-to-data/grafana-data:/var/lib/grafana \
  -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \
  -e "GF_SECURITY_ADMIN_PASSWORD=aaabbbccc" \
  grafana/grafana   
 

一些简单的解释:

  • –user $ID 必须要设置, 否则docker内部会出现permission issue
  • GF_INSTALL_PLUGINS : 安装一些非自带的插件
  • GF_SECURITY_ADMIN_PASSWORD : 账号: admin / aaabbbccc

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK