容器是独立运行的一个或者一组应用,以及他们的运行态环境。
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必修的。除此之外,没有其他的资源
docker的启动和停止
systemctl**命令是系统服务管理器指令
- systemctl start docker
- systemctl stop docker
- systemctl restart docker
- systemctl status docker
- systemctl enable docker【开机启动】
Docker帮助命令
- sudo docker version
- sudo docker info 【docker具体信息】
- sudo docker --help 【帮助命令】
Docker镜像命令
查看本地镜像
- sudo docker images
- 列出本地镜像:
- 同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用镜像仓库源:镜像标签来定义不同的镜像。
- 如果不指定镜像的版本标签,默认使用ubuntu:lastest
- REPOSITORY:镜像名称
- TAG:镜像标签
- IMAGE ID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
从网络中搜索镜像
docker search 镜像名称
例子:
- sudo docker search --filter=stars=30 tomcat
- 搜索点赞数超过30的tomcat镜像
- NAME:仓库名称
- DESCRIPTION:镜像描述
- STARS:用户评价,反应一个镜像的受欢迎程度
- OFFICIAL:是否官方
- AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
- sudo docker pull tomcat 【下载最新版本的tomat】
- docker pull centos:7
- 下载centos7镜像
删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi `docker images -q`
Docker容器命令
有镜像才能创建容器,这是根本前提
下载镜像
- sudo docker pull centos 【下载一个Centos镜像】
- sudo docker images 【发现centos只有200MB,这是因为镜像只保留了核心,所以启动会很快】
启动容器
- 基于镜像新建一个容器并启动
- 将在终止状态的容器重新启动
新建并启动:docker run
2.1、以一个镜像为模板新建并启动交互式容器【启动并且进入】
语法:sudo docker run --it --name 容器名 镜像名|镜像ID
sudo docker run --it --name mycentos centos
- -i表示交互
- -t表示终端
- –name表示为容器指定一个名称
sudo docker run -it centos /bin/bash
- 启动一个bash,运行用户进行交互:-t让docker分配一个伪终端并绑定到容器的标准输出上,-i让容器的标准输入打开
- 和上面命令效果一样
- sudo docker run centos /bin/echo ‘hello world’ 【输出一个helloworld然后终止容器】
- sudo docker run -t -i ubuntu /bin/bash
2.2、开启守护式容器:以后台方式启动容器
- sudo docker run -d --name hcentos centos 【只运行一下就马上退出了】
- sudo docker ps 【没有发现hcentos】
- sudo docker ps -a 【发现hcentos】
- 只运行一下就马上退出的原因:Docker容器后台运行必须有前台进程,如果没有前台进程,也就是那些一直挂起的命令如top,tail等,容器后台启动之后,会立即自杀因为没事可做
- sudo docker run centos /bin/sh -c “while true; do echo hello world; sleep 1; done”【容器每隔1s在终端打印hello world】
- sudo docker run -d centos /bin/sh -c “while true; do echo hello world; sleep 1; done”; 【36573d3926d19aba56baadd8ed4c26a46e8d25c892845e5ef9f25a1beb353410:后台运行,没有打印hello world;如果想要获取容器的输出信息,可以通过docker container logs [container ID or NAMES]
- docker container logs [container ID or NAMES]
doccker run时后台运行的标准操作
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像
- 创建并启动一个容器分配一个文件系统,并且在只读的镜像层外面挂载一层可读写层
- 从宿主机配置的网桥接口中
- 桥接一个虚拟接口到容器中去
- 从地址池配置一个ip地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
3、总结:启动容器时指定参数
- -t 表示让Docker分配一个伪终端并绑定到容器的标准输入上
- -i 表示让容器的标准输入保持打开
- -d 表示以守护方式打开(即非交互模式,后台运行)
- -p 设置端口映射 -p 宿主机端口:容器端口
启动已经终止的容器
语法:sudo docker [container] start/restart 容器名或者容器ID
备注:虽然container是可选的,但是建议加上,发现加上的话命令执行速度更快
- sudo docker container start 容器名或者容器ID
- 【重启已经终止的容器】
- sudo docker container restart 容器名或者容器ID
- 【将正在运行的容器终止然后重新启动】
进入正在后台运行的容器
attach命令
备注:不推荐使用
- sudo docker run -dit centos
- 【备注:d表示后台运行,it表示交互】
- sudo docker container ls
- 【结果:容器ID为5e7ac06ea9be 】
- sudo docker attach 5e7ac06ea9be
- 【备注:也可写成sudo docker attach 5e7】
- 【结果:进入可交互界面[email protected]:/# 】
- exit
- 【结果:停止容器并退出交互命令行】
- sudo docker ps
- 【结果:查看正在运行的容器,没有发现5e7ac06ea9be】
exec命令
备注:用得更多
- sudo docker run -dit centos
- 【备注:d表示后台运行,it表示终端交互】
- sudo docker container ls
- 【结果:容器ID为51d75e80e76a 】
- sudo docker exec -it 51d75e80e76a bash
- 【结果:进入可交互界面[email protected]:/# 】
- exit
- 【结果:不停止容器,退出交互命令行】
- sudo docker ps
- 【结果:查看正在运行的容器,发现51d75e80e76a】
总结:attach和exec命令对比
相同点:
- 都是进入正在运行的容器内
不同点
- attach中可以使用exit停止容器并退出容器,对于exec命令在终端使用exit可以退出容器终端并停止容器
- attach可以直接进入容器命令行,但是exec命令需要使用-it,bash才能打开可交互命令行
查看容器
- sudo docker [container] ps
- docker ps
- 【备注:查看当前正在运行的容器】
- sudo docker container ls
- 【备注:查看当前正在运行的容器】
- sudo docker [container] ps -a
- 【备注:查看所有运行过包括正在运行的容器】
- sudo docker container ls -a
- 【备注:查看所有容器包括已经终止的容器】
退出停止容器
1、退出容器
- exit:容器停止退出
- ctrl+P+Q:容器不停止退出
2、停止容器:
语法:sudo docker stop 容器名或者容器ID
- sudo docker stop 5e7ac06ea9be
3、强制停止容器:
语法:sudo docker kill 容器名|容器ID
- sudo docker kill 5e7ac06ea9be
删除容器
- sudo docker container rm trusting_newton
- 【备注:删除一个处于终止状态的容器】
- sudo docker [container] rm 3ee6ee1b2471 -f
- 【备注:删除一个运行中的容器:docker会发送sigkill信息给容器】
- 【备注:container可选,但是建议写上】
- 【备注:3ee6ee1b2471为容器ID,也可以用容器名字代替】
- sudo docker container prune
- 【备注:清理所有处于终止状态的容器】
修改镜像名字
- docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
删除镜像[这个好像有些问题]
语法:docker rmi 镜像名|镜像ID
- sudo docker rmi hello-world【删除镜像】
- sudo docker rmi -f $(docker images -qa)【删除全部镜像】
参考:https://yeasy.gitbooks.io/docker_practice/content/data_management/volume.html