Docker常用命令

目录

一、Docker概述

1.什么是Docker

2.Docker为什么出现?

3.Docker的历史

二、聊聊Docker

三、Docker能干嘛

三、Docker安装

1.Docker的基本组成

2.Ubuntu安装docker教程并配置阿里云镜像加速

3.Ubuntu配置docker的阿里云镜像加速器

四、回顾helloWorld

4.1底层原理

五、Docker常用命令

5.1 帮助命令

5.2 镜像命令:

5.2.1 docker images  # 查看所有本地的主机上的镜像

5.2.2 docker search 搜索镜像

5.2.3 docker pull mysql 下载镜像

5.2.4 docker rmi -f  删除镜像

5.3 容器命令:

5.3.1 新建容器并启动

5.3.2 列出所有的运行的容器

5.3.3 退出容器

5.3.4 删除容器

5.3.5 启动和停止容器的操作

5.4 常用其它命令

5.4.1 后台启动容器

5.4.2 查看日志

5.4.3 查看容器里进程信息

5.4.4 查看镜像里的语言数据

5.4.5 进入当前正在进行的容器

5.4.6 从容器内拷贝文件主机上

六、Docker常用命令总结:


一、Docker概述

1.什么是Docker


Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

2.Docker为什么出现?

一款产品:开发--上线两套环境!应用环境,应用配置!

开发---运维。 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验十分大?

环境配置是十分的麻烦,每一个机器都要背书环境(集群Redis、ES、Hadoop。。。)!费时费力

发布一个项目jar(Redis、MySQL jdk ES 等包,有时需要安装包需要很多时间),项目能不能带上环境安装打包(这样不就省时间了)!

之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop,配置超麻烦了,不能够跨平台。

传统:开发jar,运维来做@

现在:开发打包部署上线,一套流程昨晚!

java --》apk--》发布(应用商店)--》张三使用apk---安装即可用!

java --》jar(环境) ---打包项目带上环境(镜像)---(Docker仓库:商店)---下载我们发布的镜像---直接运行即可

Docker给以上的问题,提出了解决方案!

Docker思想来源于集装箱!

JRE--多个应用((端口冲突)--原来都是交叉的!

隔离:Docker核心思想! 打包装箱! 每个箱子是互相隔离的

Docker通过隔离机制,可以将服务器利用到极致!

本质:所有的技术都是来源我们需要解决的问题,才去学习!

3.Docker的历史

2010年,几个搞IT的年轻人,就在美国成立了一个公司dotCloud

做一些pass的云计算服务! LXC有关的容器技术!

他们将自己的技术(容器化技术)命名就是Docker!

Docker刚刚诞生的时候,没有引起行业的注意!dotCloud,就活不下去!

然后想到开源(开发源代码!)

2013年,docker开源!

Docker越来越多的人发现了docker的优点!火了,Docker每个月会更新一个版本!

2014年4月9日,Docker1.0发布

Docker为什么这么火?

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个Vmaware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

vm:linux centos原来镜像(一个电脑)隔离,需要开启多个虚拟机!  几个G  几分钟

docker:隔离,镜像(最核心的环境4m+jdk+mysql)十分的小巧,运行镜像就可以了!小巧! 几个 秒级启动!

 

二、聊聊Docker

Docker是基于Go语言开发的

官网:www.docker.com

文档地址:https://docs.docker.com/Docker的文档是超级详细的!

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

 

三、Docker能干嘛

之前的虚拟机技术

虚拟机技术缺点:

1.资源占用十分多

2.冗余步骤多

3。启动很慢

容器化技术:

容器化技术不是模拟虚拟机的

比较docker喝虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器间是互相隔离,每个容器都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

应用更快捷的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

更便捷eider升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!

项目打包为一个镜像,扩展 服务器A!服务器B上可以直接运行服务器A达到扩容

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的

更高效的计算资源利用:

Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能被挤压到极致。

 

三、Docker安装

1.Docker的基本组成

镜像(image):

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像---》run---》tomcat01容器(提供服务器),通过这个镜像可以创多个容器(最终服务运行或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

启动,停止,删除,基本命令!

目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository):

仓库就是皴法镜像的地方!

仓库分为共有仓库和私有仓库!

docker Hub(默认是国外的)

阿里云、、、都有容器服务(配置镜像加速!)

2.Ubuntu安装docker教程并配置阿里云镜像加速

https://blog.csdn.net/qq_43648470/article/details/108171050

3.Ubuntu配置docker的阿里云镜像加速器

https://blog.csdn.net/weixin_43142797/article/details/105877375

 

四、回顾helloWorld

4.1底层原理

Docker怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进行运行在主机上。通过Socket聪客户端访问

DockerSever接收到Docker-Client命令,就会执行这个命令

Docker为什么比VM快?

1.Docker有着比虚拟机更少的抽象层

2.docker利用的是宿主机的内核,VM需要是Guest OS

所以说,新建一个容器的时候,dockers不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是今安在Guest OS,分种级别的,而docker是利用宿主机的操作系统,省略了许多复杂过程,秒级!

五、Docker常用命令

5.1 帮助命令

docker version  # 显示docker的版本信息
docker info     # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/run/

5.2 镜像命令:

5.2.1 docker images  # 查看所有本地的主机上的镜像

root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   2 months ago   13.3kB


# 解释
REPOSITORY 镜像的仓库源
TAG        镜像的ID
IMAGE ID   镜像的ID
CREATED    镜像的创建时间
SIZE       镜像的大小

# 可选项
Options:
  -a, --all            # 列出所有的镜像
  -q, --quiet          # 只显示镜像的ID

5.2.2 docker search 搜索镜像

d1165f221234
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10856     [OK]       


# 可选择,通过收藏来过滤
--filter=STARS=3000 搜索大于3000的

5.2.3 docker pull mysql 下载镜像

# 下载镜像docker pull 镜像名[:tag]
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker pull mysql
Using default tag: latest  # 如果不写tag,默认就是latest
latest: Pulling from library/mysql # 分层下载,docker image的核心联合文件系统
69692152171a: Pull complete 
1651b0be3df3: Pull complete 
951da7386bc8: Pull complete 
0f86c95aa242: Pull complete 
37ba2d8bd4fe: Pull complete 
6d278bb05e94: Pull complete 
497efbd93a3e: Pull complete 
f7fddf10c2c2: Pull complete 
16415d159dfb: Pull complete 
0e530ffc6b73: Pull complete 
b0a4a1a77178: Pull complete 
cd90f92aa9ef: Pull complete 
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
 

docker pull mysql
等价
docker.io/library/mysql:latest


# 指定版本下载
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker pull mysql:5.7
5.7: Pulling from library/mysql
69692152171a: Already exists 
1651b0be3df3: Already exists 
951da7386bc8: Already exists 
0f86c95aa242: Already exists 
37ba2d8bd4fe: Already exists 
6d278bb05e94: Already exists 
497efbd93a3e: Already exists 
a023ae82eef5: Pull complete 
e76c35f20ee7: Pull complete 
e887524d2ef9: Pull complete 
ccb65627e1c3: Pull complete 
Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 查看版本

root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         5.7       2c9028880e58   4 hours ago    447MB
mysql         latest    c0cdc95609f1   4 hours ago    556MB
hello-world   latest    d1165f221234   2 months ago   13.3kB

5.2.4 docker rmi -f  删除镜像

# 通过ID删除指定的镜像
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker rmi 2c9028880e58
# 删除全部的镜像
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker rmi -f $(docker images -aq)

 

5.3 容器命令:

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos

5.3.1 新建容器并启动

dokcer run [可选参数]  image

# 参数说明
--name="Name"  容器名字 tomcat01  tomcat02, 用来区分容器
-d             后台方式运行
-it             使用交互方式运行,进入容器查看内容
-p             指定容器的端口 -p 8080:8080
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口 (常用)
    -p 容器端口
    
# 启动并进入容器
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker run -it centos /bin/bash
[root@654eaac0b726 /]# 

# 查看容器内centos,基础版本,很多命令是不完善的
[root@654eaac0b726 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器内退出
[root@654eaac0b726 /]# exit
exit
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# ls
anaconda3    default.conf      nginx.conf   zlib-1.2.11.tar.gz  模板  图片  下载  桌面
cmake-3.9.2  examples.desktop  zlib-1.2.11  公共的              视频  文档  音乐
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# 

5.3.2 列出所有的运行的容器

# docker ps 命令
     # 列出当前正在运行的容器
-a   # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q   # 只显示容器的编号

root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                      PORTS     NAMES
654eaac0b726   centos         "/bin/bash"   5 minutes ago   Exited (0) 55 seconds ago             trusting_jennings
d0de4bfd0262   centos         "/bin/ba"     5 minutes ago   Created                               nice_vaughan
36ceb02cbc8e   d1165f221234   "/hello"      5 hours ago     Exited (0) 5 hours ago                agitated_wing

5.3.3 退出容器

exit # 直接容器停止退出
ctrl+q+p # 容器不停止退出

5.3.4 删除容器

docker rm 容器id                  # 删除指定的容器,不能删除正在运行的容器,若强制删除rm -f
docker rm -f $(docker ps -aq)   # 删除所有的容器
docker ps -a -q|xargs docker rm   #删除所有的容器

5.3.5 启动和停止容器的操作

docker start    容器id  # 启动容器
docker restart  容器id  # 重启容器     
docker stop     容器id  # 停止容器    
docker kill     容器id  # 杀掉容器  

5.4 常用其它命令

5.4.1 后台启动容器

# 命令 docker run -d 镜像名!
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker run -d centos

# 问题docker ps,发现  centos 停止了
# 常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

5.4.2 查看日志

docker logs -f -t -n --tail 容器ID

# 退出日志
ctrl + c

# 自己编写一段shell脚本
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker run -d centos /bin/sh -c "while true;do echo bianbian;sleep 1;done"

# 显示日志
-tf     # 显示日志
--tail  # 要显示日志条数
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker logs -f -t -n --tail 93679179fbc6

5.4.3 查看容器里进程信息

# 命令 docker top 容器id

root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker top 93679179fbc6
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4704                31266               0                   09:58               
root                31266               31238               0                   09:42              

5.4.4 查看镜像里的语言数据

# 命令 docker inspect 容器id

root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker inspect 93679179fbc6

5.4.5 进入当前正在进行的容器

# 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令
docker  exec -it 容器ID bashshell


# 测试
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home/bianbian# docker exec -it 93679179fbc6 /bin/bash
[root@93679179fbc6 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 01:42 ?        00:00:00 /bin/sh -c while true;do echo bianbian;sleep 1;done
root      1440     0  0 02:06 pts/0    00:00:00 /bin/sh
root      1680     0  0 02:10 pts/1    00:00:00 /bin/bash
root      1730     0  1 02:11 pts/2    00:00:00 /bin/bash
root      1748     1  0 02:11 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root      1749  1730  0 02:11 pts/2    00:00:00 ps -ef
[root@93679179fbc6 /]# 

# 方式二
docker attach 容器id


# dokcer exec   # 进入容器后开启一个新的终端,可以进去操作
# docker attach # 进入容器正在执行的终端,不会启动新的进程

5.4.6 从容器内拷贝文件主机上

[root@3e2d361730a0 home]# ls
# 在容器内新建一个文件
[root@3e2d361730a0 home]# touch test.java
[root@3e2d361730a0 home]# exit
exit
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
3e2d361730a0   centos    "/bin/bash"   3 minutes ago   Exited (0) 23 seconds ago             thirsty_borg
# 将这个文件拷贝到主机
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home# docker cp 3e2d361730a0:/home/test.java /home
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home# ls
bianbain.java  bianbian  lost+found  test.java
root@bianbian-Lenovo-XiaoXin-700-15ISK:/home# 

# 拷贝是一个手动过程,未来使用-v卷的技术,可以实现同步

六、Docker常用命令总结:

docker images作用
docker images -a查看所有镜像
docker images -q查看所有镜像的ID
docker images -aq查看所有镜像并且只显示ID
docker rmi作用
docker rmi -f hello-world:latest根据容器名称删除镜像
docker rmi -f 容器id根据容器ID删除镜像
docker rmi -f 容器id 容器id 容器id删除多个容器
docker rmi -f $(docker images -aq)递归删除所有容器
命令作用
docker run -d -it -p 8080:9090 -v Myvolume:/home/nginx myCentos image启动名为myCentos的Docker容器并将自身容器的9090端口与服务器的8080端口进行映射,同时将该容器下的/home/nginx文件夹挂载到服务器的Myvolume文件夹下
docker run -d centos*在后台启用Docker
docker search 镜像名搜索镜像
docker pull 镜像名下载镜像
docker rm 容器Id删除指定容器,不能删除正在运行的容器,如果要强制删除,使用 rm -f
docker rm -f $(docker ps -aq)递归删除所有的容器
docker ps -a -qxargs docker rm删除所有的容器
docker ps列出所有运行中的容器
docker ps -a列出当前正在运行的容器 + 带出历史运行过的容器
docker ps -n显示最近创建的容器
docker ps -q只显示当前容器的ID
docker start 容器id启动容器
docker restart 容器 id重启容器
docker stop 容器id停止当前正在运行的容器
docker kill 容器id强制停止当前容器
docker logs -tf —tail 10 140b84067c43显示id为140b84067c43的容器的前10条日志
docker top 容器 id查看容器中进程信息
docker inspect 60e4c99e0c查看镜像元数据
docker exec -it 767a7b65b54d /bin/bash进入容器内部并开启一个新的终端,(常用)
docker attach 767a7b65b54d进入容器正在执行的终端,不会启动新的进程
docker cp tomcat.bak/* /home/qingtian复制容器中的tomcat.bak文件到服务器的/home/qingtian目录下
docker cp 767a7b65b54d:/home/java_test /homedocker cp 容器id: 容器内路径 目的位置主机路径 
docker stats Id查看服务状态
docker commit -a=”qingtian” -m=”add webapps app” 9452c3dbc44c tomcat01:1.0-a:作者信息,-m:提交信息
docker volume查看所有volume的情况
docker commit -a=”qingtian” -m=”add webapps app” 9452c3dbc44c tomcat01:1.0提交id为 9452c3dbc44c 的Docker容器 作者为qingtian 提交信息为 “add webapps app” Tag信息 tomcat01:1.0
docker network ls id查看Docker网络信息

 

参考:

https://www.kuangstudy.com/bbs/1362640018950189058

https://blog.csdn.net/pbrlovejava/article/details/80357744?ops_request_mis

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值