- 安装docker
- 卸载docker
- 为什么docker比vm快
- 镜像命令
- 容器命令
- 使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如
service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。
安装docker
安装gcc gcc-c++
yum install gcc -y
yum install gcc-c++ -y
卸载旧版本
初装可以忽略
yum -y remove docker docker-common docker-selinux docker-engine
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
安装docker ce
启动、测试docker
systemctl start docker
docker version
docker run hello-world
配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
#阿里云
{
“registry-mirrors”: [“https://{自已的编码}.mirror.aliyuncs.com“]
}
systemctl daemon-reload
systemctl restart docker
卸载docker
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
为什么docker比vm快
(1)docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。

镜像命令
docker images
列出本机上所有的镜像
- -a :列出本地所有的镜像
- -q:只显示镜像ID
- —digests:显示镜像的摘要信息
-
docker search
docker pull
docker rmi
删除镜像
删除单个:docker rmi 镜像ID
删除多个:docker rmi -f 镜像名1:tag 镜像名2:tag
删除全部: docker rmi -f $(docker images -qa)docker commit
从容器创建一个新的镜像
- -a:提交的镜像作者
- -c:使用dockerfile指令来创建镜像
- -m:提交时的说明文字
-p:在commit时,将容器暂停
docker commit -a "iruka" -m "my mysql" ID mymysql:v1
docker tag
打标签
docker tag mymysql:v1 username/mysql:v1
docker push
推送
docker push username/mysql:v1:::info tag 和 push的前提是要先docker login :::
容器命令
docker run
新建并启动容器
docker run [options] image [command]—name=”容器新名字”:为容器指定一个名称;
- -d:后台运行容器,并返回容器ID,即启动守护式容器;
- -i:以交互式模式运行容器,通常与-t同时使用;
- -t:为容器重新分配一个伪终端,通常与-i一起使用;
- -P:随机端口映射;
- -p:指定端口映射;主机端口:容器端口
- -v:目录映射;主机目录:容器目录
交互式启动:
docker run -it centos /bin/bash
docker ps
列出当前所有正在运行的容器
- -a:列出正在运行的容器+历史上运行过的容器
- -l:显示最近创建的容器
- -n:显示最近n个容器
- -q:静默模式,只显示容器编号
- --no-trunc:不截断输出
退出容器
启动容器
重启容器
停止容器
强制停止容器
删除已停止的容器
docker rm 容器ID
一次性删除多个容器:
docker rm -f $(docker ps -q -a)
docker ps -q -a |xargs docker rm
启动守护式容器
docker run -d 容器名 :::info
使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如
service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。
查看日志
docker logs -f -t —tail 容器ID
- -f:跟随最新的日志打印
- -t:加入时间戳
- --tail:数字 显示最后多少条
查看容器内运行的进程
查看容器内部细节
进入容器
docker exec -it 容器ID /bin/bash
重新进入 docker attach 容器ID
:::info
上述两个的区别:attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
:::
从容器拷贝文件到主机
docker cp 容器ID:容器内部路径 目的主机路径(反过来也可以)
