写给docker新手的文章

1. 前言

“相见恨晚”用来形容我对docker的热爱再合适不过了,自从用了docker,开发环境也不安装了,系统想换就换了,部署更是一键部署,再也不用担心在这台机器上跑的好好的,其它机器有问题了…

写这篇文章,也是为docker的发展尽自己一点绵薄之力。

适合人群:您使用docker不久;正打算使用docker;还没有使用过docker。

2. docker是什么

docker是容器(引擎)。

容器用来做什么? 装东西

装什么?装你的应用,例如你的博客网站就是一个应用。

3. 为什么要用docker

3.1 对开发者来说

1 启动速度快,传统虚拟机需要数分钟的启动时间,docker秒秒钟启动。
2 一致的运行环境,用了docker,再也不会出现,为什么在我的电脑运行的好好的,在你的电脑上却有问题!!

3.2 对运维人员来说

1 持续交付和部署。开发者只需要push代码到版本管理(git)即可,接下来的自动测试,自动构建,自动部署都交给docker吧
2 更轻松的扩展。什么?需要增加机器满足日益增长的pv需求,有docker-compose 一键部署就够了。

3.3 与传统虚拟机的比较

《写给docker新手的文章》

4. 如何学习(使用)docker

从现在开始,删除掉你本机上的所有开发环境,包括虚拟机, Vagrant

官方文档 当然是不二之选
当然,也照顾习惯看中文的朋友:
Docker — 从入门到实践

5. docker常用命令

1 service docker start |stop |restart 启动 停止 重启

2 docker run 镜像名称:标签 运行容器 docker -i 交互式操作 docker -t terminal操作
–rm 退出就删除容器
–name 指定容器名称

举例:docker run -it –rm ubuntu:14.04 bash

3 docker images 列出已经下载下来的镜像portcommit

-f dangling= true 显示 虚悬镜像(dangling image)
根据仓库名列出镜像 docker images  '仓库名'
列出特定的某个镜像,也就是说指定仓库名和标签 docker images  '仓库名:标签名'
-f在..之前  docker images -f since=mongo:3.2
-f参数  docker images -f label=com.example.version=0.1
只显示id docker images -q
自定义表格格式 docker images --format "{{.ID}}: {{.Repository}}" 或者 docker images --format "table {{.ID}}\t{{.Repository}}\t{{.T-pag}}"

4 docker pull 获取镜像

docker pull ubuntu:14.04

5 docker exec 进入容器

docker exec -it webserver bash

6 docker build [选项] 生成的文件名 上下文(context) 构建镜像

例如 : docker build -t nginx:v3 .

7 -p <宿主端口>:<容器端口>

8 docker rmi [选项] <镜像1> [<镜像2> …]

注意 docker rm 命令是删除容器,不要混淆。

9 docker rm 删除容器

 docker rm $(docker ps -a -q) 删除所有容器

6. docker常见问题

1 由于墙的问题导致docker安装失败或者各种问题
Docker CE 镜像源站
2 pull镜像太慢
Docker 镜像加速器
3 docker mysql设置初始密码(docker mysql启动马上就自动退出)

docker run 加上环境变量参数 -e MYSQL_ROOT_PASSWORD=password1

4 docker redis 设置初始密码

Dockerfile CMD: 'redis-server --requirepass "password1"'

5 docker cron没有执行

Dockerfile CMD: service cron start

6 docker cron 执行的时候时区不对

RUN echo "Asia/Shanghai" > /etc/timezone
或者
同步主机时区
docker run -v /etc/localtime:/etc/localtime <IMAGE:TAG>
以上两种是网上搜索到的,我都没有成功,我目前的解决方案是将crontab -e配置中的时区都往前推8个小时。例如:你本来是要1,9点运行的,设置为1,17

7 docker corn 获取不了环境变量

原因:corn的bash环境变量和docker容器的环境变量不是同一个。
解决:
printenv |grep -v "==" | grep -v " " | sed 's/^\(.*\)$/export \1/g' > /project_env.sh \
&& chmod +x /project_env.sh \
&& service cron start \
&& bash

两个grep -v 是为了反正docker-compose link的时候变量变量污染


    原文作者:hncg
    原文地址: https://segmentfault.com/a/1190000012952756
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞