关于docker的自身的一些信息
docker version/ docker info 两者都可以查看到一些信息,可以根据自身需要使用。
[root@k8s-m1 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.15
API version: 1.40
Go version: go1.17.9
Git commit: fd82621
Built: Thu May 5 13:16:58 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.15
.......
[root@k8s-m1 ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 31
......
docker命令帮助信息
在初学使用docker命令时,由于还不够熟练,可能对相关命令的使用还不够熟悉,因此,我们要多学会使用帮助信息。
[root@k8s-m1 ~]# docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
......
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
......
Run 'docker COMMAND --help' for more information on a command.
相关命令可以进一步使用帮助信息:
[root@k8s-m1 ~]# docker images -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
搜索镜像
docker search
[root@k8s-m1 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 18515 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 201
bitnami/nginx Bitnami nginx Docker Image 163 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 91
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 72 [OK]
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 25 [OK]
rapidfort/nginx RapidFort optimized, hardened image for NGINX 14
rancher/nginx-ingress-controller
解释:
name:代表该镜像的名称
description:关于该镜像的描述
stars:点赞、喜欢的意思
official:是否为官方提供
下载镜像
docker pull (默认是从docker hub上下载最新版本)
[root@k8s-m1 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
可以看到默认下载的镜像版本为latest最新版本,使用的镜像仓库为官方镜像仓库docker.io。
查看镜像
查看本地主机上的镜像
docker images /docker image ls
[root@k8s-m1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.22.1 0f8498f13f3a 7 weeks ago 142MB
bitnami/sealed-secrets-controller v0.18.0 eb1f20da92b7 11 months ago 48.8MB
busybox latest beae173ccac6 16 months ago 1.24MB
nginx latest 605c77e624dd 16 months ago 141MB
nginx 1.20.2 50fe74b50e0d 17 months ago 141MB
解释:
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小
同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 的镜像,如果你不定义镜像的标签版本,默认将使用标签为lastest的镜像。更多选项请用docker images -h
悬挂镜像请参考:https://blog.youkuaiyun.com/margu_168/article/details/130739590?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130739590%22%2C%22source%22%3A%22margu_168%22%7D
查看镜像的详细信息
[root@k8s-m1 ~]# docker image inspect centos:latest
中间层镜像
为了加速镜像构建、重复利用资源,Docker会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。
docker image ls -a
以特定格式显示
默认情况下,docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls 把所有的虚悬镜像的 ID 列出来,然后才可以交给 docker image rm 命令作为参数来删除指定的这些镜像,这个时候就用到了 -q 参数。
docker image ls -q
更多命令参数请参靠docker image -h
运行镜像
[root@k8s-m1 ~]# docker run -i --rm -p 80:80 nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
......
docker run 就是运行容器的命令,我们这里简单说明一下上面用到的参数,后续详细分享。
-i:交互式操作,可以看到nginx运行产生的一些日志。
–rm:这个参数是说容器退出后随之将其删除。默认情况下,不会添加此参数,因为启动的服务总是要一直使用的,退出的容器并不会立即删除,需要手动 docker rm。我们这里只是演示效果,使用后立即删除避免浪费空间。
-p:端口映射,前面是宿主机的端口,后面是容器内服务的端口。注意需要与"-P"区分。
nginx :这是指用运行nginx:latest 这个镜像来启动容器。
最后我们通过 exit 退出了这个容器。
删除镜像
docker rmi -f 镜像id # 通过id删除,多个的话直接把id加在最后面
docker rmi -f 镜像名:tag # 通过镜像名+标签删除,多个也是直接加在最后面
docker rmi -f $(docker images -qa) # 删除全部
制作镜像
创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile文件创建。
基于已有镜像的容器创建
docker commit 提交容器副本使之成为一个新的镜像
语法:
docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]
-p 提交时暂停运行容器
示例:
[root@k8s-m1 ~]# docker run -d -p 80:80 nginx #根据官方提供的镜像运行一个nginx服务容器
4f8b29ea16941d57095c0328dd5cf53e4dbd1b5c21cb999064bb6e080b92f4b0
[root@k8s-m1 ~]# docker exec -it 4f /bin/bash
root@4f8b29ea1694:/# cd /etc/nginx/conf.d/
root@4f8b29ea1694:/etc/nginx/conf.d# ls
default.conf
root@4f8b29ea1694:/etc/nginx/conf.d# grep root /etc/nginx/conf.d/default.conf #查看nginx存放文件的root目录
root /usr/share/nginx/html;
root /usr/share/nginx/html;
# root html;
# deny access to .htaccess files, if Apache's document root
root@4f8b29ea1694:/etc/nginx/conf.d# echo "hello nginx" > /usr/share/nginx/html/index.html #修改默认网页内容
访问测试:
根据修改默认网页内容的容器创建镜像:
[root@k8s-m1 ~]# docker commit -m "first commit" -a "margu_168" 4f nginx:test #通过commit生产新的镜像
sha256:24726336ab6697b927c8d509131f27b28fa34409ae5c30b9c9a1eef8a09c32a0
[root@k8s-m1 ~]# docker rm -f 4f #删除原来的nginx容器
4f
[root@k8s-m1 ~]# docker run -d -p 80:80 nginx:test #根据新镜像生产容器
b7e2554996e35528f7ae93732c6c910fa9e563941d0a3ee61ab41ed3e9eda265
访问测试,效果如上图
基于本地模板导入
docker image save centos:latest > centos_test.tar.gz
docker import centos_test.tar.gz centos:latest
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交
Docker 镜像的导入和导出 docker save 和 docker load
用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
docker save和docker export的区别:
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
基于dockerfile文件创建(重点常用)
[root@k8s-m1 ~]# vim Dockerfile
FROM centos
MAINTAINER "margu_168"
RUN /bin/echo 'root:margu_168' |chpasswd
RUN useradd test
RUN /bin/echo 'test:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
[root@k8s-m1 ~]# docker build -t harbor.margu.com/centos:test . #注意这个点号,代表Dockerfile文件位于当前目录下
Sending build context to Docker daemon 8.556GB
Step 1/9 : FROM centos
latest: Pulling from library/centos
......
以上就是使用dockerfile文件创建镜像的过程,重点就是Dockerfile文件的编写,后续将详细讲解编写Dockerfile的语法。
设置镜像标签(可以理解为重命名)
docker tag ,设置新标签后本地会有两个id一样的镜像,只是名字不一样。系统中其实是只存在着一份镜像文件,底层镜像会重用。设置镜像标签常用在将公有云的镜像打标签后推到自己的私有镜像库。
[root@k8s-m1 ~]# docker tag centos:latest harbor.margu.com/centos:test
上传镜像
docker push
docker push harbor.margu.com/centos:test
#将镜像推至自己的私有仓,私有仓库的搭建后续分享
借用一张图片总结: