- 1. 什么是docker
- 1.1 OCI&OCF
- 1.2 Docker引擎架构
- 1.3 Docker运行架构
- 1.4 docker架构
- 2. docker镜像与镜像仓库
- 3. docker对象
- 4. docker的安装及使用
- 4.1 docker安装
- 4.2 docker加速
- 4.3 docker常用 *** 作
- 4.3.1 镜像 *** 作
- 4.3.2 容器 *** 作
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的核心思想就是来自集装箱;集装箱的概念是隔离货物,所以docker的核心就是隔离机制。同时docker使用可移植镜像所以部署以及运维极其方便快捷。
docker中的容器:
- lxc --> libcontainer --> runC
OCI
开放容器倡议:
- 由Linux基金会主导于2015年6月创立
- 旨在围绕容器格式和运行时制定一个开放的工业化标准
包含两个规格
- 运行时规范(runtime-spec)
- 镜像规范(image-spec)
OCF
开放式容器格式:
runC 是一个 CLI 工具,用于根据 OCI 规范生成和运行容器
- 容器作为 runC 的子进程启动,可以嵌入到各种其他系统中,而无需运行守护进程
- runC 建立在 libcontainer 之上,同样的容器技术为数百万个 Docker 引擎安装提供支持
docker提供了一个专门容纳容器镜像的站点:点此
1.2 Docker引擎架构 1.3 Docker运行架构 1.4 docker架构 2. docker镜像与镜像仓库
在docker中仓库的名字是以应用的名称取名的,镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。
当你使用 docker 时,相当于正在创建和使用图像、容器、网络、卷、插件和其他对象。
- IMAGES (镜像)
-
图像是一个只读模板,其中包含创建 docker 容器的说明。
-
一般情况下,一个镜像基于另一个镜像,并带有一些额外的自定义。
-
镜像的获取:
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作docker镜像(DockerFile)
- ConTAINERS (容器)
- 容器是镜像的可运行实例。
- 您可以使用 docker API 或 CLI 创建、运行、停止、移动或删除容器。
- 您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。
//配置yum仓库 [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-base.repo https://mirrors.aliyun.com/repo/Centos-8.repo //配置docker的yum源 [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1919 100 1919 0 0 12380 0 --:--:-- --:--:-- --:--:-- 12380 [root@localhost yum.repos.d]# ls CentOS-base.repo CentOS-Linux-ContinuousRelease.repo CentOS-Linux-Extras.repo CentOS-Linux-Media.repo CentOS-Linux-Sources.repo CentOS-Linux-AppStream.repo CentOS-Linux-Debuginfo.repo CentOS-Linux-FastTrack.repo CentOS-Linux-Plus.repo docker-ce.repo CentOS-Linux-baseOS.repo CentOS-Linux-Devel.repo CentOS-Linux-HighAvailability.repo CentOS-Linux-PowerTools.repo [root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo //下载docker所需要的环境 [root@localhost yum.repos.d]# yum install -y yum-utils device-mapper-persistent-data lvm2 //安装docker [root@localhost yum.repos.d]# yum -y install docker-ce4.2 docker加速
一般来说docker下载镜像相当缓慢,需要配置加速来使用
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
- docker cn
- 中国科技大学加速
- 阿里云加速(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速)
设置阿里云镜像加速
[root@localhost ~]# systemctl start docker [root@localhost ~]# cat > /etc/docker/daemon.json <4.3 docker常用 *** 作{ > "registry-mirrors": ["写自己的阿里云加速地址"] > } > EOF [root@localhost ~]# systemctl restart docker [root@localhost ~]# systemctl daemon-reload
//查看docker的版本信息 [root@localhost ~]# docker version Client: Docker Engine - Community Version: 20.10.11 API version: 1.41 Go version: go1.16.9 Git commit: dea9396 Built: Thu Nov 18 00:36:58 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.11 API version: 1.41 (minimum version 1.12) Go version: go1.16.9 Git commit: 847da18 Built: Thu Nov 18 00:35:20 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2 docker-init: Version: 0.19.0 GitCommit: de40ad0 //查看docker的详细信息 [root@localhost ~]# docker info Client: #docker客户端信息 Context: default Debug Mode: false Plugins: #插件 app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.6.3-docker) scan: Docker Scan (Docker Inc., v0.9.0) Server: #docker服务器端信息 Containers: 0 #容器数量 Running: 0 #正在运行的数量 Paused: 0 #暂停的数量 Stopped: 0 #已停止的数量 Images: 0 #镜像数量 Server Version: 20.10.11 #docker服务器版本 Storage Driver: overlay2 #docker存储驱动程序 Backing Filesystem: xfs #文件系统 Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file #日志驱动程序 Cgroup Driver: cgroupfs #Cgroup驱动程序 Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive #Swarm状态 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc Default Runtime: runc #默认runtime Init Binary: docker-init containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc version: v1.0.2-0-g52b36a2 init version: de40ad0 Security Options: #安全选项 seccomp Profile: default Kernel Version: 4.18.0-305.3.1.el8.x86_64 #linux内核版本 Operating System: CentOS Linux 8 #linux *** 作系统 OSType: linux Architecture: x86_64 CPUs: 2 #宿主机CPU数量 Total Memory: 1.748GiB #宿主机内存 Name: localhost.localdomain #宿主机名称 ID: XNOI:YZS3:33XD:GJ5P:LI5T:IMNW:2J2E:H737:LJNR:K2CC:FSRJ:WGLG Docker Root Dir: /var/lib/docker #docker根目录 Debug Mode: false Registry: https://index.docker.io/v1/ #镜像仓库 Labels: Experimental: false Insecure Registries: #非安全镜像仓库 127.0.0.0/8 Registry Mirrors: #镜像加速 https://xxxxxxx.mirror.aliyuncs.com/ Live Restore Enabled: false4.3.1 镜像 *** 作
//从docker仓库中搜索镜像 [root@localhost ~]# docker search centos NAME DEscriptION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 6904 [OK] ansible/centos7-ansible Ansible on Centos7 135 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 131 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 121 [OK] centos/systemd systemd enabled base container. 105 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 92 imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK] ...... NAME //镜像仓库源的名称 DEscriptION //表示该镜像的功能 STARS //表示下载热度 OFFICIAL //是否docker官方发布 AUTOMATED //自动构建 ..... //从docker仓库中下载镜像 [root@localhost ~]# docker pull centos Using default tag: latest latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest docker.io/library/centos:latest //查看本地主机上的所有/指定镜像 docker images [镜像名] 选项: -a //列出本地所有的镜像; --digests //显示镜像的摘要信息; -q //只显示镜像ID。 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 months ago 231MB REPOSITORY //镜像的仓库源 TAG //镜像标签 IMAGE ID //镜像ID CREATED //镜像创建时间 SIZE //镜像大小 //获取镜像的详细信息 [root@localhost ~]# docker inspect centos:latest [ { "Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6", "RepoTags": [ "centos:latest" ], "RepoDigests": [ "centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177" ], "Parent": "", "Comment": "", "Created": "2021-09-15T18:20:05.184694267Z", "Container": "9bf8a9e2ddff4c0d76a587c40239679f29c863a967f23abf7a5babb6c2121bf1", "ContainerConfig": { "Hostname": "9bf8a9e2ddff", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, .....略 //添加镜像标签,类似于别名 [root@localhost ~]# docker tag centos:latest centos:1.1 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 1.1 5d0da3dc9764 2 months ago 231MB centos latest 5d0da3dc9764 2 months ago 231MB //删除镜像 docker rmi 镜像名:标签 选项: -f //强制删除 [root@localhost ~]# docker rmi centos:1.1 Untagged: centos:1.1 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 months ago 231MB //导出镜像 [root@localhost ~]# docker save -o /tmp/centos centos:latest [root@localhost ~]# cd /tmp [root@localhost tmp]# ls centos //载入镜像 [root@localhost ~]# docker load < /tmp/centos Loaded image: centos:latest4.3.2 容器 *** 作
容器创建命令
docker run //从镜像运行一个容器 选项: --name //指定容器的名称,如果不指定随机给容器生成一个名称 -it //为容器分配一个始终运行的伪终端,需要指定shell;-i保持运行状态,-t是分配伪终端,不建议run时使用 -d //容器以守护进程的方式运行 -p 宿主机端口:容器端口 //将宿主机端口映射给容器端口 -v 宿主机目录:容器目录 //将宿主机目录挂载到容器中;直接写容器目录省略宿主机目录,将在宿主机自动创建一个目录挂载到容器中 -e //启动容器时传递环境及其值 --rm //容器退出时删除容器 --cpuset-cpus CPU序号 //容器能够使用哪些物理cpu --cpu-shares 数值 //CPU共享权值(相对权重) --memory 数值 //容器内存限制,单位b,k,m,g --memory-swap 数值 //容器内存+交换分区大小,不能小-m的值 --restart 策略 //指定容器停止后的重启策略 no //容器退出时不重启 on-failure //容器故障退出(返回值非零)时重启 always //容器退出时总是重启 --network 网络名称 //容器网络设置 bridge //使用桥接模式 host //容器使用主机的网络 container:NAME_or_ID //使用其他容器的网路,共享IP和PORT等网络资源 none //容器使用自己的网络(类似bridge);但是不进行配置,如分配veth pair 和网桥连接,配置IP等 --link 容器名称 //指定容器间的关联,可以和指定容器进行通信
//用centos镜像来创建一个叫centos01的容器 [root@localhost ~]# docker create --name centos01 centos 03a5336c593df090c777ea1f7344cc410381b25a28884d674d2cd72d45aa5076 //使用centos镜像启动一个名为centos02的容器并分配一个bash shell的终端进入容器 [root@localhost ~]# docker run --name centos02 -it centos /bin/bash [root@30631e320b4f /]# exit exit 注意: 1.指定-it选项为容器分配shell后,启动容器时运行的命令将会被shell替代 2.不加-d选项的容器一旦使用exit退出容器shell,容器就终止运行;ctrl+p+q可以退出shell,容器仍将继续运行 //使用centos镜像启动一个名为centos03的容器并在后台运行 [root@localhost ~]# docker run --name centos03 -d centos d7d3b91954d32b9cf9b9e9b2f8463c1f3cb923d69cdadf4738d7482a65f6dce3 //使用centos镜像启动一个名为centos04的容器,该容器在后台运行,访问宿主机的8080端口可以访问到容器的80端口 [root@localhost ~]# docker run --name centos04 -d -p 8080:80 centos d147a3cf5693bc7ea8aac00ab84f06e3166a3746c252a9c14d92c61a3ed8992e
容器查看命令
docker ps //查看容器运行状态 选项: -a //显示所有的容器,包括未运行的 -q //只显示容器id -l //显示最近创建的容器。 -f "筛选条件" //根据条件过滤显示的内容 //查看所有容器状态 [root@localhost ~]# docker ps -a ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d147a3cf5693 centos "/bin/bash" 32 seconds ago Exited (0) 31 seconds ago centos04 d7d3b91954d3 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago centos03 30631e320b4f centos "/bin/bash" 3 minutes ago Exited (0) 3 minutes ago centos02 03a5336c593d centos "/bin/bash" 7 minutes ago Created centos01 ConTAINER ID //容器 ID IMAGE //使用的镜像 COMMAND //启动容器时运行的命令 CREATED //容器的创建时间 STATUS //容器状态 状态有7种: created(已创建) restarting(重启中) running(运行中) removing(迁移中) paused(暂停) exited(停止) dead(死亡) PORTS //容器的端口信息和使用的连接类型(tcpudp)。 NAMES //容器名称 //查看容器详细信息 [root@localhost ~]# docker inspect centos04 [ { "Id": "d147a3cf5693bc7ea8aac00ab84f06e3166a3746c252a9c14d92c61a3ed8992e", "Created": "2021-12-01T18:24:37.775412386Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "exited", "Running": false, .....略
容器生命周期管理命令
docker start 容器名 //开启容器 docker stop 容器名 //停止容器 docker kill 容器名 //杀死容器 docker restart 容器名 //重启容器 docker pause 容器名 //暂停容器中所有的进程 docker unpause 容器名 //恢复容器中所有的进程
容器占用资源查看命令
docker stats 容器名 //查看容器使用资源信息 docker top 容器名 //查看容器中运行的进程信息,支持ps命令参数 docker port 容器名 //查看宿主机端口和容器端口之间的端口映射
容器日志查看命令
docker logs 容器名 //获取容器的日志信息 选项: -f //跟随打印最新的日志追加在最后面 -t //显示日志打印的时间戳 --tail 数量 //只显示最新的指定数量的几条日志信息
** 容器内进程连接和命令执行**
//创建一个后台运行容器 [root@localhost ~]# docker run --name centos05 -d -it centos /bin/bash 4054570d47c1be7460546ab923f6d5e2709a0ec74775d0f6a748be1a3bc90696 [root@localhost ~]# docker ps -a ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4054570d47c1 centos "/bin/bash" 5 seconds ago Up 4 seconds centos05 d147a3cf5693 centos "/bin/bash" 8 minutes ago Exited (0) 8 minutes ago centos04 d7d3b91954d3 centos "/bin/bash" 10 minutes ago Exited (0) 2 minutes ago centos03 30631e320b4f centos "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago centos02 03a5336c593d centos "/bin/bash" 15 minutes ago Exited (0) 2 minutes ago centos01 //连接到正在运行的容器进程中,默认连接到容器启动时启动的进程 [root@localhost ~]# docker attach centos05 [root@4054570d47c1 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var //不进入容器执行容器中的命令 docker exec 容器名 执行命令 选项: -d //后台执行,不显示结果 -it //为容器分配一个始终运行的伪终端,需要指定shell;-i保持运行状态,-t是分配伪终端 [root@localhost ~]# docker exec centos05 ls bin dev etc home lib lib64 lost+found media ....略 //使用docker exec命令打开一个shell进入到容器中,使用exit退出shell,容器也不会终止运行 [root@localhost ~]# docker exec -it centos05 /bin/bash [root@4054570d47c1 /]# exit exit [root@localhost ~]# docker ps -a ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4054570d47c1 centos "/bin/bash" 4 minutes ago Up 4 minutes centos05 d147a3cf5693 centos "/bin/bash" 12 minutes ago Exited (0) 12 minutes ago centos04 d7d3b91954d3 centos "/bin/bash" 14 minutes ago Exited (0) 6 minutes ago centos03 30631e320b4f centos "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago centos02 03a5336c593d centos "/bin/bash" 19 minutes ago Exited (0) 6 minutes ago centos01
宿主机和容器文件复制命令
docker cp 容器名:容器文件路径 宿主机路径 //将容器中的文件复制到宿主机中 docker cp 宿主机路径 容器名:容器文件路径 //将宿主机中的文件复制到容器中
容器导出和导入命令
docker export 容器名 > 导出的容器文件名 //容器导出 docker import 导出的容器文件名 镜像:标签 //容器导入,导入之后只会生成镜像
容器删除命令
docker rm 容器名 //删除容器,无法删除运行状态下的容器 选项: -f //强制,可以删除运行状态下的容器 [root@localhost ~]# docker rm centos01 centos01 [root@localhost ~]# docker rm centos05 Error response from daemon: You cannot remove a running container 4054570d47c1be7460546ab923f6d5e2709a0ec74775d0f6a748be1a3bc90696. Stop the container before attempting removal or force remove [root@localhost ~]# docker rm -f centos05 centos05 [root@localhost ~]# docker ps -a ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d147a3cf5693 centos "/bin/bash" 15 minutes ago Exited (0) 15 minutes ago centos04 d7d3b91954d3 centos "/bin/bash" 16 minutes ago Exited (0) 9 minutes ago centos03 30631e320b4f centos "/bin/bash" 18 minutes ago Exited (0) 18 minutes ago centos02 //批量删除所有容器 [root@localhost ~]# docker rm `docker ps -qa` d147a3cf5693 d7d3b91954d3 30631e320b4f [root@localhost ~]# docker ps -a ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)