Docker常用命令与小技巧汇总

安装脚本

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • 详解修改docker时区及docker常用命令

    前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

  • docker常用命令操作方法

    继续docker的学习之旅,今天练习一些常用的命令: 一.镜像相关 1.1 列出本机所有镜像 后面的操作,都以ubuntu做为练习的目标. 另外:如果某些镜像文件不想要了,可以用下面的命令删除 1.2 删除镜像 docker rmi 镜像Id(即:1.1图中的IMAGE ID) 有时候删除会失败,比如:有一个容器正在使用该镜像文件.这时可以加参数-f 强制删除,如果不清楚每个命令可以加哪些参数,可以用 docker 命令 --help 查看帮助,比如: bin docker rmi --help

  • Docker Compose常用命令详解

    1.Docker compose的使用非常类似于docker命令的使用,但是需要注意的是大部分的compose命令都需要到docker-compose.yml文件所在的目录下才能执行. 2.compose以守护进程模式运行加-d选项 $ docker-compose up -d 3.查看有哪些服务,使用docker-compose ps命令,非常类似于 docker 的ps命令 4.查看compose日志 $ docker-compose logs web $ docker-compose lo

  • Docker常用的清除容器镜像命令小结

    前言 Docker 是一个非常有趣的项目.它自己宣称可以减轻部署服务器的难度,当然我相信里面有炒作的成分.但是实际使用后,我觉得 Docker 的表现还是可圈可点的.这篇文章主要总结了Docker清除容器镜像常用的命令,下面来一起看看吧. 杀死所有running状态的容器 docker kill $(docker ps -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有\'untagged/dangling\' ()状态的镜像 docker rmi

  • docker常用命令总结之安装、镜像、容器基本操作

    以下均在centos 7进行的操作 docker安装 yum install -y docker -y:表示在安装过程中按照默认配置进行安装,不需要进行逐步确认 查看已经安装的docker yum list installed | grep docker 删除已经安装的docker yum remove -y docker.x86_64 yum remove -y docker-client.x86_64 yum remove -y docker-common.x86_64 docker服务启动

  • 常用的Docker基本命令及用法汇总

    查看docker安装信息 docker info 获取docker镜像 docker pull azraelrabbit/monupw 创建docker容器 docker run --name monojexus -d -p 32022:22 -p 32080:80 -v /mydata:/data azraelrabbit/monupw 以后台进程的方式运行docker容器 sample_job=$(docker run -d monojexus /bin/sh -c "while true;

  • Docker 常用命令整理并介绍

    什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环境中部署和调整数据库或其他的后台应用: 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的P

  • Dockerfile中常用命令汇总

    语法组成: 1 注释信息 2 指令---参数 [通常要大写|实质上不区分大小写] 3 顺序执行 4 第一个非注释行必须是from [基于那个基础镜像制作]   5 需要一个专用目录[自己创建] 6 首字目必须大写---Dockerfile 7 制作镜像依赖到文件或者包组时,必须提前准备至专用目录下 .dockerignore file --每一行中定义一个忽略文件     --创建在工作目录中     例如:pam.d/su* ..................................

  • Docker 常用命令整理及使用注意事项总结

    常用docker命令 对docker常用命名的详细解释,让你快速学会docker的使用! docker,轻量级虚拟机,也有人称之为应用容器 优点:1.部署速度快 2.测试服务与部署可保持完全一致 常用命令 1.查看容器的root用户密码 docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1 因为Docker容器启动时的root用户的密码是随机分配的.所以,通过这种方式就可以得到redmine容器的root用户的密码了. 2.

  • Docker 常用命令整理(实用篇)

    1. 查看docker信息(version.info) # 查看docker版本 docker version # 显示docker系统的信息 docker info 2. 对image的操作(search.pull.images.rmi.history) # 检索image docker search image_name # 下载image docker pull image_name #列出镜像列表; -a, --all=false Show all images; --no-trunc=

随机推荐