Docker记录

docker

命令汇总
docker search 在docker hub中搜索镜像;
docker pull 从docker镜像源服务器拉取指定镜像或者库镜像;
docker push 推送指定镜像或者库镜像至docker源服务器;
docker history 展示一个镜像形成历史;
docker images 列出系统当前镜像;
docker run 创建一个新的容器并运行一个命令;
docker start 启动容器;
docker stop 停止容器;
docker attach 当前shell下attach连接指定运行镜像;
docker build 通过Dockerfile定制镜像;
docker commit 提交当前容器为新的镜像;
docker cp 从容器中拷贝指定文件或者目录到宿主机中;
docker create 创建一个新的容器,同run,但不启动容器;
docker diff 查看docker容器变化;
docker events 从docker服务获取容器实时事件;
docker exec 在已存在的容器上运行命令;
docker export 导出容器的内容流作为一个tar归档文件[对应import];
docker import 从tar包中的内容创建一个新的文件系统映像[对应export];
docker info 显示系统相关信息;
docker inspect 查看容器详细信息;
docker kill 指定docker容器;
docker load 从一个tar包中加载一个镜像[对应save];
docker login 注册或者登陆一个docker源服务器;
docker logout Docker registry退出;
docker logs 输出当前容器日志信息;
docker port 查看映射端口对应的容器内部源端口;
docker pause 暂停容器;
docker ps 列出容器列表;
docker restart 重启运行的容器;
docker rm 移除一个或者多个容器;
docker rmi 移除一个或多个镜像;
docker save 保存一个镜像为一个tar包[对应load];
docker tag 给源中镜像打标签;
docker top 查看容器中运行的进程信息;
docker unpause 取消暂停容器;
docker version 查看docker版本号;
docker wait 截取容器停止时的退出状态值。



Dockerfile文件中命令细节
ADD和COPY
两个都是复制宿主机文件到docker容器中
不同是ADD如果复制的是tar、bz2类似的文件,则会复制到容器中时会自动解压



Docker 包括三个基本概念:

镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
-t: 在新容器内指定一个伪终端或终端。

-i: 允许你对容器内的标准输入 (STDIN) 进行交互

docker ps        查看正在运行的容器

容器状态:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)

docker logs  ContainerID    查看容器中的标准输出


docker镜像加速
[root@tencent_lg themes]# cat /etc/docker/daemon.json 
{
    "registry-mirrors":["https://hub-mirror.c.163.com/"]
}



docker流程
启动docker
systermctl start docker                    
1.查找镜像
docker search  centos                    
2.拉取镜像
docker pull  镜像名                    
3.创建并启动容器
docker run -itd containerID /bin/bash            
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
[root@tencent_lg ~]# docker run -itd 831691599b88 /bin/bash
6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e
加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
4.进入容器
docker exec -it 6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e /bin/bash
推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker attach  6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e
使用attach进入,然后使用exit退出后容器也会停止,因此推荐使用exec方式进入容器
5.停止正在运行的容器
docker stop containerID
6.启动停止的容器
docker ps -a     查看所有容器列表(-a包括停止的)
docker start containerID

7.导出容器(将镜像导出为本地文件)
两个命令export和save
docker export 3026f3553800 > CentosV1.tar

docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)

命令区别:
export命令导出的tar文件略小于save命令导出的
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),
不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。

8.导入容器(将本地文件生成镜像)
两个命令:load和import
示例
docker load -i nginx.tar
或
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

示例
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp

建议
可以依据具体使用场景来选择命令
若是只想备份images,使用save、load即可
若是在启动容器后,容器内容有变化,需要备份,则使用export、import

9.删除容器
一个一个删除
docker rm -f containerId
一次性删除所有停止的容器
docker container prune


10.我们来运行一个web应用容器
[root@tencent_lg ~]#  docker pull training/webapp
[root@tencent_lg ~]# docker run -d -P training/webapp python app.py
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
我们看到容器中的5000端口映射到了本地的32768端口
这里就可以使用浏览器运行本机ip加上32769端口就能访问到容器中的web应用了
[root@tencent_lg ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
ebe4c668f15b        training/webapp     "python app.py"     31 seconds ago      Up 30 seconds       0.0.0.0:32768->5000/tcp   upbeat_saha

我们也可以通过 -p 参数来设置不一样的端口:
docker run -d -p 5000:5000 training/webapp python app.py
同样使用浏览器运行本机ip加上5000端口就能访问到容器中的web应用了
[root@tencent_lg ~]# docker port 6503fdacd500
5000/tcp -> 0.0.0.0:5000
使用上面的命令可以直接看到映射的端口号
[root@tencent_lg ~]# docker top 6503fdacd500
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                10105               10089               0                   00:13               ?                   00:00:00            python app.py
这个是看容器的进程号
docker logs -f containerID        这个是看容器内部的标准输出

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
[root@tencent_lg ~]# docker inspect 6503fdacd500
[
    {
        "Id": "6503fdacd5007a3713404bb805b4a7634c7750ff8ebec469a52c2ec1ba1f5765",
        "Created": "2020-07-11T16:13:55.122084508Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 10105,
            "ExitCode": 0,
            。。。。。。

    }
    
11.列出所有镜像
[root@tencent_lg ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
centosv1                    a                   66470c5389db        About an hour ago   236 MB
docker.io/ubuntu            latest              adafef2e596e        4 days ago          73.9 MB
docker.io/centos            latest              831691599b88        3 weeks ago         215 MB
docker.io/training/webapp   latest              6fae60ef3446        5 years ago         349 MB

REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,
有 15.1014.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

删除镜像命令:
docker rmi imageID
[root@tencent_lg ~]# docker rmi 66470c5389db
Untagged: centosv1:a
Deleted: sha256:66470c5389dbe4b4a8a3c6ca7831130a0db242adac129f8af7a90ed51ecd24d4
Deleted: sha256:679f3da8b3453afa4bdef739cdb93e20dcb15d33113bf9f877c0d7b3caecc56a
12.修改镜像TAG号
[root@tencent_lg themes]# docker tag adafef2e596e docker.io/ubuntu:latest
[root@tencent_lg themes]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu            latest              adafef2e596e        4 days ago          73.9 MB
docker.io/ubuntu            v1                  adafef2e596e        4 days ago          73.9 MB

13.构建镜像
编写Dockerfile文件
[root@tencent_lg ~]# cat Dockerfile 
From    docker.io/centos:latest
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

[root@tencent_lg ~]# docker build -t runoob/centos:aa .
原文地址:https://www.cnblogs.com/l-gang/p/13286440.html