Docker 入门

启动docker

systemctl start docker

帮助命令

  • docker --help
  • docker [Commands] --help   例:docker run --help

Docker镜像

  • 搜索镜像 docker search [镜像名字]
  • 获取镜像 docker pull [镜像名字]
  • 导入镜像 docker load --input [镜像包]
  • 导出镜像 docker save -o [镜像包] [镜像名字]
  • 查看镜像 docker images
  • 删除镜像 docker rmi [镜像ID]

1、执行docker search centos 会从dockerhub上搜索镜像

2、如果线上服务器无法连接dockerhub网络,可以通过其它方式下载docker镜像包,如centos.tar

执行命令docker load --input centos.tar 将镜像导入docker

除了input方式导入,还可以使用重定向导入  docker load < centos.tar

3、获取镜像 docker pull centos

4、查看镜像 docker images

5、导出镜像 docker save -o centos.tar centos

6、删除镜像 docker rmi 67591570dd29 (上图IMAGE ID)

备注:如果镜像已经创建了一个容器,那么将无法进行删除

Docker容器

  • 启动容器 docker run [参数选项] [镜像名称] [命令(可省略)]
  • 运行已停止容器 docker start
  • 停止容器 docker stop
  • 强制关闭容器 dokcer kill
  • 查看容器 docker ps
  • 进入容器 docker attach | docker exec | nsenter
  • 删除容器 docker rm
  • 获取容器元数据 docker inspect
  • 容器访问日志 docker logs

1、启动容器 docker run --name mydocker -t -i centos /bin/bash

  • --name 名称,管理容器时可以通过ID或名称
  • -t 让docker分配一个伪终端
  • -i 让docker的标准输入打开{input}

提示:最后的/bin/bash可以省略,但是最后一个如果不是命令,那就是镜像的名称。

输入上方的命令之后会直接进入到容器里面

exit退出

备注:容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了。

通过PID我们可以看出,容器中的PID=1的是/bin/bash,正常centos 7系统中PID为1的进程是/usr/lib/systemd/systemd

简单理解,容器给进程做隔离使用,虚拟机给操作系统做隔离使用。

2、docker start mydocker 或 docker start f13d63fd6457 方式让容器运行

3、查看容器 docker ps -a(运行和不运行的容器全部列出)

docker ps -a -q  列出所有容器的docker id

[root@linux-node1 ~]# docker ps -a -q
86c9a83d95be
8822c2f37e9e
8814cf80b424
96892a7bb67e
e9e4eed824dd
f807dc543291
f13d63fd6457

4、进入容器 docker attach mydocker

备注:这样进入容器的缺点就是如果在开一个窗口就会同步操作,类似于单用户模式(windows远程桌面)。

生产场景是不使用docker attach的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面。

yum install util-linux -y 

我们通过nsenter就可以进入容器,但是nsenter是通过pid进入容器里,所以我们需要知道容器的pid。我们可以通过docker inspect来获取到pid。

[root@linux-node1 ~]# docker start mydocker
mydocker
[root@linux-node1 ~]# docker inspect -f "{{ .State.Pid }}" mydocker
61864
[root@linux-node1 ~]# nsenter -t 61864 -m -u -i -n -p

nsenter --help 帮助命令

  • -m, –-mount参数是进去到mount namespace中
  • -u, –-uts参数是进入到uts namespace中
  • -i, –-ipc参数是进入到System V IPC namaspace中
  • -n, –-net参数是进入到network namespace中
  • -p, –-pid参数是进入到pid namespace中
  • -U, –-user参数是进入到user namespace中
  • -t,--target参数是获取名字空间的目标进程

/bin/bash是我们运行容器产生的进程

-bash 是我们使用nsenter产生的,这样如果我们退出容器,容器就不会退出,因为/bin/bash还在运行

[root@f13d63fd6457 /]# exit
logout
[root@linux-node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" 52 minutes ago Up 17 minutes mydocker

脚本实现进入docker

[root@linux-node1 ~]# cat docker_in.sh
#!/bin/bash
# Use nsenter to access docker
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
nsenter -t $PID -m -u -i -n -p
}
docker_in $1

执行结果如下:

[root@linux-node1 ~]# chmod +x docker_in.sh
[root@linux-node1 ~]# ./docker_in.sh mydocker
[root@f13d63fd6457 /]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11768 1680 ? Ss+ 08:12 0:00 /bin/bash
root 45 0.0 0.0 15168 1884 ? S 08:37 0:00 -bash
root 67 0.0 0.0 50844 1708 ? R+ 08:37 0:00 ps -aux

5、docker exec不进入容器,但将命令发送容器里执行并获取返回结果

[root@linux-node1 ~]# docker exec mydocker ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11768 1680 ? Ss+ 08:12 0:00 /bin/bash
root 87 0.0 0.0 47440 1672 ? Rs 08:42 0:00 ps -aux

docker exec进入容器

[root@linux-node1 ~]# docker exec -it mydocker /bin/bash
[root@f13d63fd6457 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11768 1680 ? Ss+ 08:12 0:00 /bin/bash
root 91 0.0 0.0 11768 1888 ? Ss 08:45 0:00 /bin/bash
root 103 0.0 0.0 47440 1672 ? R+ 08:46 0:00 ps aux

它执行命令/bin/bash的PID是91

6、删除容器 docker rm mydocker 或 docker rm -f mydocker

docker另一种删除方式 ,启动一个容器完成命令后就删

[root@linux-node1 ~]# docker run --rm centos /bin/echo "shhnwangjian"
shhnwangjian
[root@linux-node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" About an hour ago Up 41 minutes mydocker

可以在测试或学习时使用,退出时删除容器

[root@linux-node1 ~]# docker run --rm --name test -it centos /bin/bash
[root@9db1873a5b93 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.6 0.0 11768 1880 ? Ss 08:55 0:00 /bin/bash
root 13 0.0 0.0 47440 1668 ? R+ 08:55 0:00 ps aux
[root@9db1873a5b93 /]# exit
exit
[root@linux-node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" About an hour ago Up 43 minutes mydocker

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

7、强制关闭所有运行容器

docker kill $(docker ps -q)

8、ngnix容器

[root@linux-node1 ~]# docker pull nginx
[root@linux-node1 ~]# docker run -d nginx
4acac5d79bb60c3ad3d8a7da59855c75279a866382939e10947e2802ab8a9072
[root@linux-node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4acac5d79bb6 nginx "nginx -g 'daemon off" 23 seconds ago Up 21 seconds 80/tcp, 443/tcp goofy_jepsen
f13d63fd6457 centos "/bin/bash" 2 hours ago Up About an hour mydocker

docker run -d 后台运行

Docker 命令(二)的更多相关文章

  1. 常见docker命令(二)-容器生命周期相关

    docker run 命令主要参数-d 后台运行,返回容器id-i 以交互模式运行,通常与-t连用-t 为容器重新分配一个伪输入终端,通常与-i连用-P(大写) 随机端口映射,容器内部端口随机映射到主 ...

  2. 深入浅出Docker(二):Docker命令行探秘

    1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满 ...

  3. docker命令总结(二)

    上次只是给大家把命令的作用以及简单使用列出来了(大家可以查看:docker命令总结(一)),那这篇文章会详细介绍每条命令的参数,命令比较多建议大家使用搜索,进行查看 search docker sea ...

  4. Jenkins中执行docker命令报错

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?   在配置Jenkins从Gitlab自 ...

  5. Docker 入门 到部署Web 程序- (阿里面试常用的docker命令和优点)

    最近阿里的面试官问我Docker是做什么用的,我记得之前360和美团,京东的都问过,但是一直没时间看,最近有时间了,系统的学习了一下Docker,在此做一下记录,方便各位看官学习交流 一.Docker ...

  6. docker 命令部分

    本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: 看一个变迁图   看一个变迁图 ...

  7. 容器版jenkins安装并且实现使用宿主机docker命令,采用的是docker outside deocker,带jdk、添加maven、git

    docker版jekins使用宿主机docker命令 docker版jekins安装,实现CI/CD,也就是实现在容器里面使用宿主机docker命令,这样方式为:docker outside deoc ...

  8. docker命令集锦

    sudo docker image ls 查看有哪些image镜像sudo docker run hello 运行image 删除全部containerdocker rm $(docker conta ...

  9. 运行 docker .... 命令报错

    一.检查 Linux 上是有存在 docker [root@localhost bin]# docker version 不存在 docker 时,可以使用如下命令下载 docker [root@lo ...

  10. Docker命令学习

    今天更换腾讯云系统的时候发现了多了个CoreOS,据说是专门运行docker的轻量系统,顺便学习一下docker命令. 1. docker version 显示 Docker 版本信息. 2. doc ...

随机推荐

  1. Android Matrix类以及ColorMatri

    引自:http://www.chinabaike.com/t/37396/2014/0624/2556217.html Android Matrix类以及ColorMatrix类详解 最近在系统学习了 ...

  2. HDU 1698 <线段树,区间set>

    题目连接 题意: 一条长为N的铜链子,每个结点的价值为1.有两种修改,l,r,z; z=2:表示把[l,r]区间内链子改为银质,价值为2. z=3:表示把[l,r]区间内链子改为金质,价值为3. 思路 ...

  3. HDU2579--Dating with girls(2)--(DFS, 判重)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. 为什么做Web开发要选择PHP

    大部分互联网公司做WEb开发都选择PHP,PHP的优势在哪?你应该知道的 以前偶尔被人问到,为什么你(和大部分互联网公司)做Web开发要选择PHP, PHP有什么好处.简单的回答便是“PHP简单,开发 ...

  5. Django: 之Apache、Nginx部署以及发送邮件

    在这里讲述部署的方法和常见的问题,并给出了在BAE,JAE,SAE等上面部署的实例. Django + nginx + Gunicorn/uwsgi部署方式,参见另一篇:Django部署(nginx) ...

  6. listview的简单封装

    package com.itheima.googleplay.ui.view; import android.content.Context; import android.graphics.Colo ...

  7. IPSec VPN实验

    IPSec VPN实验 实验拓扑: 实验目的:掌握IPSec VPN原理 掌握site-to-site VPN配置 IPSec配置参数: IKE policy isakmp key 转换集 加密算法 ...

  8. MDK下调试时提示AXF文件无法导入的解决方法(转)

    源:http://blog.163.com/zhaojun_xf/blog/static/3005058020117784643555/ 在开发ARM项目中,很多工程师都不太喜欢使用MDK的调试模式, ...

  9. MyEclipse2015 javaweb项目从svn检出后变成java项目,clean之后不能编译,解决办法是

     javaweb项目从svn检出后变成java项目,解决办法是:1.项目右键–properties–Project Facets,勾选上Dynamic Web Module .Java 两个复选框.点 ...

  10. UITableviewCell 重用内存

    转载自:http://www.cnblogs.com/tangbinblog/p/3371545.html 重用实现分析 查看UITableView头文件,会找到NSMutableArray*  vi ...