安装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软件包索引

yum makecache fast

安装docker ce

yum -y install 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容器只需要几秒钟。

image.png

image.png

镜像命令

docker images

列出本机上所有的镜像

  • -a :列出本地所有的镜像
  • -q:只显示镜像ID
  • —digests:显示镜像的摘要信息
  • —no-trunc:显示完整的镜像信息

    docker search

    查找镜像

    docker pull

    下载镜像
    docker pull 镜像名[:TAG]

    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时,将容器暂停

      1. docker commit -a "iruka" -m "my mysql" ID mymysql:v1

      docker tag

      打标签

      1. 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:不截断输出

退出容器

exit:退出并停止容器
ctrl+P+Q:退出不停止容器

启动容器

docker start 容器ID或容器名

重启容器

docker restart 容器ID或容器名

停止容器

docker stop 容器ID或容器名

强制停止容器

docker kill 容器ID或容器名

删除已停止的容器

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 top 容器ID

查看容器内部细节

docker inspect 容器ID

进入容器

docker exec -it 容器ID /bin/bash
重新进入 docker attach 容器ID :::info 上述两个的区别:attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程 :::

从容器拷贝文件到主机

docker cp 容器ID:容器内部路径 目的主机路径(反过来也可以)