docker入门_image、container相关命令
镜像仓库服务、镜像仓库、镜像相关概念
镜像仓库服务:docker镜像仓库服务、阿里云镜像服务
镜像仓库:docker镜像仓库服务中会有很多仓库比如 docker官方仓库、个人仓库、微软的镜像仓库
镜像:镜像就是没启动的容器(类似编程中的类、类似vmware中的iso文件) 每个仓库中可以有很多个镜像
image 相关命令
-
搜索特定镜像
docker search apline =============================================== beginner@beginner-virtual-machine:~$ docker search alpine NAME DESCRIPTION STARS OFFICIAL AUTOMATED alpine A minimal Docker image based on Alpine Linux… 8311 [OK] mhart/alpine-node Minimal Node.js built on Alpine Linux 486 anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC 2.28 over A… 478 [OK] frolvlad/alpine-glibc Alpine Docker image with glibc (~12MB) 275 [OK] alpine/git A simple git container running in alpine li… 194 [OK] gliderlabs/alpine Image based on Alpine Linux will help you wi… 185 ============================================ STARTS 星级越高镜像一般会越好 OFFICIAL 是否为官方 只显示官方镜像 docker search xxxx --filter "is-official=true" 显示官方镜像并返回50行结果 最多返回100行 docker search xxxx --filter "is-official=true" --limit 50
-
拉取镜像
docker pull ubuntu:latest # 从docker镜像服务中拉取镜像(也可以改成阿里云等其他国内的) ubuntu(没有前缀说明是官方仓库):latest(标签表示最新的 但是不一定是真正最新的) docker image ls # 查看本地镜像 ================================================ beginner@beginner-virtual-machine:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE python3.8_zyh 3.0 21451ed8e840 16 hours ago 812MB python3.8_zyh latest c8ee23b16690 17 hours ago 422MB python3.8_zyh 1.0 a7abd70e6690 25 hours ago 180MB redis 6.2.6 7614ae9453d1 2 weeks ago 113MB python 3.8-slim-buster 5cc8cb0c433a 2 weeks ago 114MB ubuntu latest ba6acccedd29 2 months ago 72.8MB redis latest 7faaec683238 2 months ago 113MB elasticsearch 7.7.0 7ec4f35ab452 20 months ago 757MB mobz/elasticsearch-head 5 b19a5c98e43b 5 years ago 824MB ================================================
-
字段解释
- REPOSITORY:TAG 就是unbuntu:latest 之后可以通过这个组合进行容器的启动
- IMAGE ID 每个镜像独有的id 也可以通过id进行容器的启动 例如docker run -it ba6 id不用拼完只需要前几位是独有的即可
- CREATED 创建时间
- SIZE 镜像大小
-
删除镜像
docker image rm 镜像id or(镜像名:标签)# 如果报错可能是因为容器正在使用中 就算容器已停止但是没删除 也会无法让你删除镜像 ================================================ beginner@beginner-virtual-machine:~$ docker image rm ubuntu:latest Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 2480cdd3277d is using its referenced image ba6acccedd29 ================================================ # 所以必须先删除容器才能删除镜像 docker container stop 2480cdd3277d docker container rm 2480cdd3277d # 接下来就可以删除镜像了
-
镜像详细信息
docker image inspect ubuntu:latest =============================================== beginner@beginner-virtual-machine:~$ docker image inspect ubuntu:latest [ { "Id": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1", "RepoTags": [ "ubuntu:latest" ], "RepoDigests": [ "ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322" ], "Parent": "", "Comment": "", "Created": "2021-10-16T00:37:47.578710012Z", "Container": "249e88be79ad9986a479c71c15a056946ae26b0c54c1f634f115be6d5f9ba1c8", "ContainerConfig": { "Hostname": "249e88be79ad", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"bash\"]" ], "Image": "sha256:6c18a628d47eacf574eb93da2324293a0e6c845084cca2ea13efaa3cee4d0799", "Volumes": null, "WorkingDir": "", "Entrypoint": null, .......... =============================================== 以上是image的详细信息创建时间 运行的容器 还有 image会有多少层数(之后会有一篇随笔专门讲解现在只做了解 docker镜像是分层的)
容器相关命令
-
运行容器
docker run -it ubuntu:latest # -it是返回一个终端交互窗口 -d是后台运行 docker run -it id # ctrl+P+Q 同时按可以从容器终端返回主机终端 如果直接exit 容器也会推出 docker run -it -name hello -p 6379:6379 -v 挂载卷 容器id # -name是给容器起一个名字 容器名叫hello -p是映射端口 主机的端口号:docker容器的端口号 # -v是挂载卷 可以方便修改配置文件以及可持久化存储 之后再详细写出
-
查看容器
docker ps 与 docker container ls # 效果相同都可以列出正在运行的容器 个人倾向使用后者 docker container ls -a # 列出所有容器包括已暂停的 docker container ls -aq # 列出所有容器的id =============================================== beginner@beginner-virtual-machine:~$ docker container ls -aq 2480cdd3277d beginner@beginner-virtual-machine:~$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2480cdd3277d ubuntu:latest "bash" 2 hours ago Exited (1) 58 minutes ago boring_dirac ===============================================
-
连接容器
docker exec -it 容器id bash # 连接容器时新开一个终端进程 docker exec -it boring_dirac bash # 用容器名称连接 这里连不上的因为容器停止了 只是举个例子 docker attach #attach到一个已经运行的容器的stdin,然后进行命令执行的动作。但是需要注意的是,如果从这个stdin中exit,会导致容器的停止
-
将容器打包成镜像
docker commit (容器id or name) test:latest #将当前容器打包成一个叫test 标签为latest的镜像
-
停止容器
docker container stop 容器id or 容器名 #停止容器 docker container start 容器id or 容器名 #启动容器 当你停止之前给容器创建了一些文件,你停止之后再次启动 文件是不会消失的
-
删除容器
docker container stop 容器id or 容器名 docker container rm 容器id or 容器名 #注意应该先停止后移除 虽然可以直接rm 但是给docker一些反应时间总归是好的 下面两条命令是删除全部容器 docker container stop $(container ls -aq) docker container rm $(container ls -aq)
-
容器生命周期
容器内有进程容器就不会停止,如果没有进程容器就会终止 docker run -it ubuntu:latest 此时容器内有一个bash进程 如果exit 容器终止 docker ctrl +q+p 切换回主机终端 容器bash进程在后台运行 docker exec -it 容器id bash 现在容器内有两个进程 都是bash 如果当前使用exit 容器不会终止因为还有一个bash进程 如果是docker attach 还是连接原来的那个进程 注意退出的时候要ctrl+p+q 因为只有一个进程 如果直接exit 容器也会停止
-
容器重启策略
重启策略包括 always、unless-stopped、on-field三种
doceker container run --restart always sleep 10
-
always
除非明确stop 否则一直存在 当在bash中exit后容器停止 但因为是always 容器马上后台重启 当docker重启时 即使之前stop过 容器也会启动
-
unless-stopped
与always最大的区别是当docker重启时 之前stop过的容器不会启动
-
on-field
容器异常退出时(返回值不是0) 重启容器 在docker重启时容器也会重启
-