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.10、14.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 .