Docker系列之入门
Docker系列之入门
Docker简介
- 是一个软件,一个可以在Windows、mac、Linux等各种操作系统上运行的软件
- 是一个开源的应用容器引擎,它是基于Go开发的,项目目前是在Github上开源维护的
- 可以让开发打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到各种流行的Linux机器上
- 容器是完全使用沙箱机制,相互之间不会有任何的API交互,最主要的是容器性能方面开销成本很低
Docker组成部分
- docker主机(Host):安装了Docker程序的机器,Docker是直接可安装在各种操作系统上的,可以理解它就是一个软件
- docker仓库(Registry):用来保存各种打包好的软件镜像,仓库分为公有和私有,跟maven很相似,它也有仓库官网地址,维护了各种镜像
- docker镜像(Images):软件打包好的镜像,放在docker仓库中
- docker容器(Container):镜像启动后的实例称为容器,容器是独立运行的一个或一组应用
Docker安装
安装docker的时候,我们会接触到两个重要组件:Docker CLI客户端和Docker daemon服务端
安装环境是我自己搭建的一个虚拟机:使用的是centos7.8,安装我就不做赘述了
配置阿里云yum源
1、下载安装wget
yum install -y wget
有些时候运行这个命令会报错:yum repolist all“ to see the repos you have
具体的解决方案看这篇文章:
mv /etc/yum.repos.d /etc/yum.repos.d.backup
3、设置新的yum目录
mkdir -p /etc/yum.repos.d
4、下载阿里yum配置到刚才的目录,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
查看系统版本的命令:cat /etc/centos-release
5、更新epel源为阿里云epel源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
6、重建缓存
yum clean all yum makecache
7、查看yum仓库包
yum repolist
安装Docker
1、安装插件
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
本地缓存一份:yum makecache fast
3、查看docker版本
yum list docker-ce --showduplicates | sort -r
4、正式安装docker
推荐大家安装最新版本
yum -y install docker-ce
也可以指定版本,语法如下:
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 举例:yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7
5、开启服务
#开启服务 systemctl start docker #关闭服务 systemctl stop docker
6、安装阿里云镜像加速器
原因是下载镜像的时候,会走阿里的快一点
#创建文件 mkdir -p /etc/docker #文件内容 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://复制自己的加速器地址.mirror.aliyuncs.com"] }EOF #3、重新加载 systemctl daemon-reload systemctl restart docker
7、设置docker开启开机启动服务
systemctl enable docker
8、查看版本版本信息
docker -v docker version docker info
到这里,docker就算是安装成功了
Docker镜像(image)
docker提供了一个类似maven远程仓库的地址:Docker Hub
那,怎么去理解镜像这个概念呢?
从咱们开发的角度出发的话,可以把镜像理解为一个Class类,它就是一个应用程序,使用过程和Maven差不多,我们添加maven依赖的时候,先去下载到本地,然后再使用,docker也是,我们去远程仓库中找到镜像之后,下载该镜像到本地的Docker主机,然后可以为该镜像启动一个或者多个容器
Docker常用命令
pull命令
下载镜像的命令,默认是会去Docker Hub仓库拉取镜像
实例:下载tomcat镜像
docker pull tomcat:9.0.20-jre8
这条命令相当于maven的下载jar包一样,docker pull docker.io/tomcat:9.0.20-jre8,默认会走DockerHub地址
常用参数:
- -a,--all-tags=true/false:是否获取仓库中所有镜像,默认是false
- --disable-content-trust:跳过镜像内容的校验,默认是true
images命令
查询本机已存在的所有镜像:
docker images docker image ls
以上两个命令的效果是一样的,接下来对查询出来的格式标题进行讲解一下:
- REPOSITORY:表示镜像的仓库源,也可以理解为是什么软件
- TAG:镜像的标签,一般都是版本号信息
- IMAGE ID:镜像ID,相当于MySQL的主键ID
CREATED: 镜像创建时间 SIZE: 镜像大小
save命令
相当于备份, 将指定镜像保存成 tar 归档文件
mkdir -p /data cd /data #单个文件 docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar #多个文件 docker save \ ubuntu:20.04 \ alpine:3.12.1 \ centos:7.8.2003 \ debian:10.6-slim \ -o linux.tar
常用参数:
- -o:输出到的文件,相当于压缩之后的文件名称和格式
load命令
导入使用 docker save命令导出的镜像。
mkdir -p /data cd /data docker load -i linux.tar docker load < tomcat9.0.20.tar
常用参数:
- -i:指定导入的文件
- -q:精简输出信息
search命令
很多地方都不推荐用search,因为输出的信息有限,一般来说都推荐使用inspect命令
inspect命令
查看镜像全部信息
docker inspect tomcat:9.0.20-jre8-alpine
输入的是一个json文本,返回结果如下:
[ { "Id": "sha256:387f9d021d3ae76a2dafd661142a2659939389def2f390d40ab73bd49df242ba", "RepoTags": [ "tomcat:9.0.20-jre8-alpine" ], "RepoDigests": [ "tomcat@sha256:17accf0afeeecce0310d363490cd60a788aa4630ab9c9c802231d6fbd4bb2375" ], "Parent": "", "Comment": "", "Created": "2019-05-16T00:57:50.863755612Z", "Container": "24ab35a23fd83a3748e701f6fdca86f3618ffb29a29bd32ed2db6f9b4336056d", "ContainerConfig": { "Hostname": "24ab35a23fd8", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8080/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin", "LANG=C.UTF-8", "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre", "JAVA_VERSION=8u212", "JAVA_ALPINE_VERSION=8.212.04-r0", "CATALINA_HOME=/usr/local/tomcat", "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib", "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib", "GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23", "TOMCAT_MAJOR=9", "TOMCAT_VERSION=9.0.20", "TOMCAT_SHA512=6d2df51f0bfc6a90cfca61c86473b8843da4162c430ab06b8f66f364931f3d8a3ad399703acdd600ff4f633d7d6725edf05d5d5d19534716a2f3f9f5238a32a0", "TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz", "TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"catalina.sh\" \"run\"]" ], "ArgsEscaped": true, "Image": "sha256:a9ebb0fcc929c1b8ddd758efe32531ddadb78547da29a01dd8854c2d32ab5eb8", "Volumes": null, "WorkingDir": "/usr/local/tomcat", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "DockerVersion": "18.06.1-ce", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8080/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin", "LANG=C.UTF-8", "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre", "JAVA_VERSION=8u212", "JAVA_ALPINE_VERSION=8.212.04-r0", "CATALINA_HOME=/usr/local/tomcat", "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib", "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib", "GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23", "TOMCAT_MAJOR=9", "TOMCAT_VERSION=9.0.20", "TOMCAT_SHA512=6d2df51f0bfc6a90cfca61c86473b8843da4162c430ab06b8f66f364931f3d8a3ad399703acdd600ff4f633d7d6725edf05d5d5d19534716a2f3f9f5238a32a0", "TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz", "TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc" ], "Cmd": [ "catalina.sh", "run" ], "ArgsEscaped": true, "Image": "sha256:a9ebb0fcc929c1b8ddd758efe32531ddadb78547da29a01dd8854c2d32ab5eb8", "Volumes": null, "WorkingDir": "/usr/local/tomcat", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 107881954, "VirtualSize": 107881954, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/6090fc321bb15ef2c6e27c262cb559a9acfe5151b2b4d2a90eb8cc99e910c342/diff:/var/lib/docker/overlay2/3d0e4871a759c3f3e3a0d604ab689f19c09350a405f94a5311ba877d636e2a51/diff:/var/lib/docker/overlay2/be9c92fa96e7e2a315124e57745d457d8fe88a5682cf028d78a437dcea11e687/diff:/var/lib/docker/overlay2/9c702a0274a3a8a7029d6a46290e99d941797af406322d30f38a0922b3891b46/diff:/var/lib/docker/overlay2/8bb926a33b761565ece581b256eb32c4c76d9f64b8db7450904d14de45abb8dd/diff", "MergedDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/merged", "UpperDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/diff", "WorkDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:f1b5933fe4b5f49bbe8258745cf396afe07e625bdab3168e364daf7c956b6b81", "sha256:9b9b7f3d56a01e3d9076874990c62e7a516cc4032f784f421574d06b18ef9aa4", "sha256:edd61588d12669e2d71a0de2aab96add3304bf565730e1e6144ec3c3fac339e4", "sha256:48988bb7b8615c1af859b04776a46ddeb4d2bd1aa9b0a9a3ac099cf3f73ab29d", "sha256:d1d0b1719b963394ea25c3936f2d67f8bdb6c90bd7166137167c7b7f135742e1", "sha256:b7d850202de0030b2e8e076a40364bb695c891339ba321e6a743e9db0cc72766" ] }, "Metadata": { "LastTagTime": "0001-01-01T00:00:00Z" } } ]
查看json中指定的key的值:
#查看ID docker inspect -f {{".Id"}} tomcat:9.0.20-jre8-alpine
rmi命令
删除镜像有两种方式的命令:
docker rmi tomcat:9.0.20-jre8-alpine docker image rm tomcat:9.0.20-jre8-alpine
常用参数:
- -f:强制删除镜像,哪怕这个镜像被其他的容器引用,但是一般来说不推荐这么暴力,推荐两步走的优雅删除镜像的方式:先删除引用这个镜像的容器,再删除这个镜像
- -no-prune:不删除未带标签的父镜像
按照镜像ID查询:
#这个id是使用docker images命令回显的IMAGE ID docker rmi 11d8667108c2
清理镜像命令
主要是清理一些临时、没有被使用的镜像
docker image prune
常用参数:
- -a:删除所有没有用的镜像,不仅是临时文件
- -f:强制删除镜像文件,没有任何提示确认是否删除
Docker容器
说到容器应该能联想到Spring容器,Servlet容器、Tomcat容器等等,docker也是容器,也具备生命周期
常用命令
新建并启动容器
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:运行tomcat
docker run -it --rm -p 8080:8080 tomcat:9.0.20-jre8-alpine
常用参数:
- -d:后台运行并返回容器ID
- -i:以交互模式运行容器,通常与-t同时使用
- -P:随机端口映射,不过不推荐用
- -p:指定端口映射,格式是主机端口:容器端口,比较推荐使用这个
- -t:为容器重新分配一个伪输入终端,通常与-i同时使用
- --name="xxx":为容器指定一个名称
- -h:指定容器的hostname
- -e:设置环境变量
- --net="bridge":指定容器的网络链接类型,支持bridge/host/none/container
- --link=[]:添加链接到另一个容器,同样不推荐使用
- -v:绑定一个卷
- --privileged=false:指定容器是否为特权容器,特权容器拥有所有的capabilities
- --rm=false:指定容器停止后自动删除容器,但是对docker run -d启动的容器无效
- --restart=no:指定容器停止后的重启策略
- no:容器退出时不重启
- on-failure:容器故障退出时(返回的状态非0)重启
- always:容器退出时总是重启,这个比较保险,所以要设置的话就设置这一个参数即可
容器日志
获取容器日志
语法:
docker logs [OPTIONS] CONTAINER
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine docker logs -f tomcat9
常用参数:
- -f:跟踪日志输出
- --tail:仅列出最新N条容器日志
删除容器
不能删除正在运行的容器
语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine #需要先停止运行中的容器再删除,否则无法删除容器 docker stop tomcat9 #按照容器名称删除 docker rm tomcat9 #按照容器ID删除 docker rm 8dd95a95e687
常用参数:
- -f:通过SIGKILL信号强制删除一个运行中的容器
- -l:移除容器之间的网络连接,并不是容器本身
- -v:删除与容器关联的卷
列出容器
语法:
docker ps [OPTIONS]
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine #查看运行中的容器 docker ps tomcat9 #查看所有容器 docker ps -a tomcat9
解析一下返回的内容:
- CONTAINER ID:容器ID
- IMAGE:使用的镜像
- COMMAND:启动容器的命令
- CREATED:创建时间
- STAUTS:状态,created、restarting、running、removing、paused、exited、dead
- PORTS:容器的端口和使用的连接类型
- NAMES:自动分配的容器名称
常用参数:
- -a:显示所有容器,不管什么状态
- -q:只显示容器编号
创建容器
创建一个新的容器但不启动它
语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine
常用参数大致和run命令一样
启动、重启、停止容器
语法:
docker start [OPTIONS] CONTAINER [CONTAINER...] docker stop [OPTIONS] CONTAINER [CONTAINER...] docker restart [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker start tomcat9 docker stop tomcat9 docker restart tomcat9
进入容器
在运行的容器中执行命令。早期有attach命令,对于阻塞命令会等待,所以不方便。在 Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
示例:
#有bash命令的linux系统:例如centos docker run -it --name tomcat9.1 -p 8080:8080 tomcat:9.0.20-jre8-slim docker exec -it tomcat9.1 /bin/bash #没有bash命令的linux系统:例如alpine系统 docker run -it --name tomcat9.2 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker exec -it tomcat9.2 sh
常用参数:
- -i:即使没有附加也要保持STDIN打开
- -t:分配一个伪终端
查看容器
获取容器/镜像的元数据
语法:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker inspect tomcat9
常用参数:
- -f:指定返回值的模版文件
- -s:显示总的文件大小
- --type:为指定类型返回json
更新容器
可以动态地更新容器配置,但是官方好像说这个命令不成熟,所以还是推荐rm容器之后再run
语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine #更新容器restart策略 docker update --restart always tomcat9
杀掉容器
杀掉一个运行中的容器
语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker kill tomcat9 docker ps docker ps -a docker start tomcat9
常用参数:
- -s:向容器发送一个信号
更多推荐
所有评论(0)