docker 从入门到实战 -- 简介和命令篇

前言:

        接触 docker 已经有不少时间了,平时有用到,说一下个人感悟:docker 涉及到的常用命令也就20个左右(可以参考 记录Docker容器启动 SpringBoot 应用过程_清泉影月-CSDN博客),部署、实施、运维相关工程师用的会多一些。主要解决的问题是应用部署的环境隔离,尤其是各种应用对底层的资源依赖存在冲突的情况。

一、docker 历史

1. 2010 年若干人在旧金山成立 dotCloud 公司;

2. 2013 年迫于市场和生存压力将 dotCloud 核心引擎开源,该引擎就是 docker;

3. 2016 年国际科技公司,Amazon、Google、IBM、Red Hat、Microsoft 等均支持 docker 技术;

4. 2018年国内互联网公司逐步采用 docker 技术,其中云计算使用最普遍......

二、docker 和虚拟机

        虚拟机和 docker 最明显的差别是虚拟机必须要操作系统,而 docker 内不需要安装操作系统;docker 技术不是在 OS 外建立虚拟环境,而是在 OS 内的核心系统层来打造虚拟执行环境,通过共享宿主机 OS 的做法,取代 OS 的功用。

        虚拟机从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境。而 docker 则是直接将一个应用所需的相关代码、函式库、环境配置文件都打包起来建立沙盒执行环境。

        从隔离上来讲,虚拟机是进行硬件资源划分的完美解决方案,它利用了硬件虚拟技术,通过 Hypervisor 层实现对资源的彻底隔离;而容器则是操作系统级别的虚拟化,利用内核的特性实现,不需要外部辅助。 

docker 和虚拟机对比
特性docker虚拟机
磁盘空间小,甚至几十 KB大,一般 GB 数量级
启动速度秒级别分钟级别
运行形态运行于宿主机内核,容器共享宿主机内核运行于Hypervisor 上
并发一台宿主机可以启上千个容器两位数数量级
资源利用率
隔离性安全隔离完全隔离

三、docker 的几个概念

1. 镜像(image)

preview

         Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。甚至可以再一个镜像基础上再加一层配置就可以构建一个新的镜像。

2. 容器

        Docker 容器是从镜像启动产生的,可以简单理解为动态的 docker 镜像。容器可以进行一些 linux 操作,可以启动应用,也可以转变成镜像(后话)。

3. 仓库

        docker 仓库就是存储镜像的仓库,跟代码仓库类似。

        公共 docker 仓库地址:https://hub.docker.com

四、docker 安装

        当前 docker 支持的 OS 有 linux、windows、mac os、部分单片机。(以下 linux 为例)

官方有提供 linux 下一键安装 docker 的脚本:

稳定版:
curl -sSL https://get.docker.com/ | sh

测试版:
curl -sSL https://test.docker.com/ | sh

实验版:
curl -sSL https://experimental.docker.com/ | sh

或者在 linux 下执行安装命令:

安装docker
yum install docker-ce

五、docker 命令

如果对命令的参数有需求可以使用 [docker命令] --help 需求帮助。

1. docker 服务

启动docker:
service start docker
 
重启docker:
service restart docker

停止docker:
service stop docker
 
docker 状态查看:
service status docker

docker 信息查看:
docker info

docker 版本:
docker version

2. docker 镜像

镜像查询:
docker search  关键字

镜像获取:
docker pull 镜像名

本地镜像查看:
docker images

镜像删除:
docker rmi [镜像ID 或者 镜像名:tag]

查看镜像历史:
docker history [option] 镜像名

导出镜像(文件一般为.tar,偶尔.tar.gz):
docker save -o [文件] [镜像名:tag]
或者 
docker save [镜像名:tag] > [文件]

导入镜像:
docker load -i [文件]
或者
docker load < [文件]

构建镜像(从Dockerfile 构建):
docker build [OPTIONS] PATH | URL | -
-c:控制cpu使用
-f:选择Dockerfile
-m:设置构建内存上限
-q:不显示构建过程的信息
-t:为构建镜像打标签
eg:
docker build -f Dockerfile -t centos8-jdk8 .

构建镜像(从容器构建):
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a:添加作者信息
-c:修改 Dockerfile 命令
-m:添加提交信息
-p:暂停 commit 操作
eg:
docker commit -a 'qingquanyingyue' -m '测试' myalpine myalpine:1.0

eg,search 本质上是去 docker hub 上查询

 

 

点开 docker hub 的链接可以看到 docker 拉取命令

 

 3. docker 账号

docker 账号是 docker hub 为了方便用户拉取或发布镜像而存在的账号。

登录 docker 账号:
docker login

登出 docker 账号:
docker logout

打tag:
docker tag 需要上传的镜像[:TAG] [docker hub 注册的账号名]/镜像名[:TAG] 

推送镜像到 docker hub 仓库:
docker push [docker hub 注册的账号名]/镜像名[:TAG]

  账号登录登出操作截图:

 

 打 tag 和推送镜像操作截图:

 

docker hub 查看推送的镜像:

 

  4. docker 容器

查看宿主机 docker 服务状态:
docker stats

查看活着的容器:
docker ps

查看所有容器:
docker ps -a

创建容器(只创建不启动),参数非常多可通过 docker create --help 查看:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
eg:
docker create --name [容器名字] -it -p [宿主机port]:[容器port] -v [宿主机目录]:[容器目录] [镜像ID]

创建并启动容器,参数非常多可通过 docker run--help 查看:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
eg:
docker run --name [容器名字] -itd -p [宿主机port]:[容器port] -v [宿主机目录]:[容器目录] [镜像ID] /bin/bash

热更新容器(例如,cpu、内存,配置无法更新):
docker update [OPTIONS] CONTAINER [CONTAINER...]

容器重命名:
docker rename [旧名] [新名]

删除容器:
docker rm [容器ID/容器名]

停止容器:
docker stop [容器ID/容器名]

强杀容器(停止容器失效可使用):
docker kill [容器ID/容器名]
 
启动容器:
docker start [容器ID/容器名]

重启容器:
docker restart [容器ID/容器名]

查看容器正在运行的进程:
docker top [容器ID/容器名]

暂停/恢复容器进程:
docker pause/unpause [容器ID/容器名]

查看端口映射:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
 
查看容器详细信息:
docker inspect [容器ID/容器名]

查看容器日志:
docker logs [容器ID/容器名]

进入容器(attach)
注意:attach 退出不可使用exit或者 ctrl+c,会导致容器停止;先使用ctrl+p 再使用 ctrl+q 可避免
docker attach [容器ID/容器名]

进入容器并执行操作:
-d:后台执行
-i:交互模式
-t:分配一个TTY(执行窗口)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
eg:
docker exec -d [容器ID/容器名] sh -c "cd /apps;nohup java -jar test.jar"

复制文件:
容器 -> 宿主机
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
宿主机 -> 容器
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
eg:把宿主机 Dockerfile 文件复制到 myalpine 容器的 /apps/ 下
docker cp Dockerfile myalpine:/apps/

查看容器跟镜像的区别(只显示文件区别):
docker diff [容器ID/容器名]

查看容器事件(显示当前其他服务端的操作,例如镜像/容器创建、停止、启动等):
docker events [OPTIONS]
-f:过滤器
eg:显示所有事件
docker events
eg:查看容器 alpine-glibc 事件
docker events -f container=alpine-glibc

导出容器(跟导出镜像用法类似):
docker export [OPTIONS] CONTAINER

导入容器(跟导入镜像用法类似):
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

六、续

1.  docker 从入门到实战 -- Dockerfile 篇_清泉影月-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值