前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蛮吉学 Docker

蛮吉学 Docker

作者头像
Mshu
发布2019-08-13 11:35:43
7150
发布2019-08-13 11:35:43
举报
文章被收录于专栏:咸鱼不闲咸鱼不闲

What is Docker?

docker 是一个可以放东西的容器,那东西是什么?可以是redis、nginx、mysql。总之你能在系统上安装的都可以在dokcer里面安装。

蛮吉:为什么这么做?

集中管理,使用方便,安装更方便,不用到各各目录上去找配置文件啊,启动文件之类的。

名词解释: 镜像:类似于安装包。 容器:一个应用对应一个容器,比如,我安装一个redis,一个nginx ,那么就是两个容器,分别装有redis和nginx。

图片描述
图片描述

安装nginx

我们先安装一个nginx试试, 第一步搜索一下仓库有没有nginx的镜像

代码语言:javascript
复制
docker search nginx
clipboard.png
clipboard.png

我们发现列出了很多,那么我们需要的是第一个,把它拉下来(默认最新版)需要特订版本后面加上冒号和版本号。

代码语言:javascript
复制
docker pull nginx

这时候可以使用 docker images 命令查看已经下载下来的镜像们。

clipboard.png
clipboard.png

有了镜像我们就安装吧

代码语言:javascript
复制
docker run -p 80:80 -d --name nginx nginx

安装成功!对!你没有看错。

clipboard.png
clipboard.png

我来解释一下上面那条命令的参数,

  • -p 后面跟端口,冒号前面是宿主机的端口,后面是容器内nginx 的端口
  • -d 后台运行
  • --name 启动后容器的别名
  • 最后一个nginx 是镜像的名称。

docker ps 可以查看正在运行的容器,dockers ps -a 查看所有容器。

clipboard.png
clipboard.png

蛮吉:如果我想修改nginx 的配置怎么办?

可以使用 docker exec -it [CONTAINER ID] bash 进入容器里面找到并修改,exit命令退出容器。 也可以在启动的时候使用-v 参数挂载目录,给容器和宿主机指定目录做个映射。只需要在宿主机指定目录操作,不需要进入容器。-v 可以使用多个。我先在主机新建好了目录和配置文件。

  • 主机nginx配置文件:/app/nginx/conf/nginx.conf
  • 容器nginx配置文件:/etc/nginx/nginx.conf
  • 主机redis日志目录:/app/nginx/logs
  • 容器redis日志目录:/var/log/nginx
代码语言:javascript
复制
docker run -d -p 8082:80 --name nginx3 -v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /app/nginx/logs:/var/log/nginx nginx

如果安装redis 也是那么简单,两条命令就可以完成安装

代码语言:javascript
复制
docker pull redis
docker run -p 6379:6379 -d --name  redis-6379  redis

制作镜像

蛮吉:那我们能不能自己制作镜像?

答案是肯定的,

我们就用运行jar包为例。 比如我写了一个spring-boot 的项目,把它打成jar包 :datashare-0.0.1-SNAPSHOT.jar, 怎么打jar包?先这样,然后那样,最后再这样一下就好了。

蛮吉:怎么运行?

java -jar datashare-0.0.1-SNAPSHOT.jar & ? nohup java -jar datashare-0.0.1-SNAPSHOT.jar >info.log & ?

no no no 我要用docker 部署。 用docker 部署 就要先有镜像,制作镜像只需要一个Dockerfile文件就可以啦 以下是Dockerfile的内容:

代码语言:javascript
复制
# openjdk 基础镜像 是我pull到本地的,运行Jar 需要jdk 环境
 FROM openjdk
 
# ?作者签名
 MAINTAINER MSHU
 
# ?简化 jar 的名字路径 
 COPY datashare-0.0.1-SNAPSHOT.jar datashare.jar
 
# ?执行 java -jar 命令
 CMD java -jar datashare.jar
 
# ?设置对外端口为 8089
 EXPOSE 8089

运行Jar 需要jdk 环境,所以我提前docker pull openjdk到本地了。 将我们新建的 Dockerfile 和datashare-0.0.1-SNAPSHOT.jar放一起,该目录不要有其他文件。

运行 docker build -t datashare . 开始制作。

  • datashare 代表制作的镜像名称,.代表使用当前目录的 Dockerfile 。

镜像做好了放入容器吧。 docker run -p 8089:8089 -d --name datashare datashare

成功了!

clipboard.png
clipboard.png

蛮吉:如果我想把这个镜像拷贝出来,在我同事电脑运行行不行?

满足你! docker save -o datashare.img datashare 在当前目录导出名为 datashare.img 的镜像。 然后复制到你同事电脑上并运行docker load -i datashare.img就导入了。

镜像加速

官方仓库在国外,下载缓慢,使用以下方法可以更快!和 maven 一个道理。

修改 /etc/docker/daemon.json文件,如果没有就新建 ! 内容:

代码语言:javascript
复制
{
 "registry-mirrors": ["http://hub-mirror.c.163.com"]
 }

重启docker不能忘 !

代码语言:javascript
复制
systemctl restart docker

珍藏命令

docker pull [nginx]

下载容器

docker ps

查看正在运行的容器

docker ps -a

查看所有容器

docker exec -t -i [id] bash

根据id进入对应的软件目录

docker start [id]

启动某个容器

docker stop [id]

停止某个容器

docker restart [id]

重启容器

docker images

查看所有已安装的镜像

docker inspect [id]

查看启动容器的挂载信息

docker rm [id]

删除容器

docker rmi [镜像id]

删除镜像

docker logs -f -t --tail 200

容器ID 查看容器日志

systemctl enable docker

设置开机启动

service docker start

启动docker服务

usermod -G docker [用户名]

给指定用户添加权限

docker cp [id]:目录 /主机目录

复制容器某路径下的文件(夹)到主机某路径下的文件(夹)

docker run 后面也有很多参数,我知道的也不多,各位自行搜索吧,我去看《魁拔》啦,真心话真好看!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • What is Docker?
  • 安装nginx
  • 制作镜像
  • 镜像加速
  • 珍藏命令
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档