什么是docker
docker中的容器:
lxc --> libcontainer --> runC
docker简介:
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走.
OCI&OCF
OCI:
Open Container-initiative
由Linux基金会主导于2015年6月创立
旨在围绕容器格式和运行时制定一个开放的工业化标准
包含两个规格
运行时规范(runtime-spec)
镜像规范(image-spec)
OCF:
Open Container Format
runC是一个CLI工具,用于根据OCI规范生成和运行容器
容器是作为runC的子进程启动的,并且不需要运行守护进程就可以嵌入到各种其他系统中
runC是建立在libcontainer之上的,同样的容器技术支持了无数Docker引擎的安装
docker镜像与镜像仓库的关系
- 镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,* 而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。
- 仓库:是存放镜像的场所,dockerhub是最大的开源仓库,可以通过docker search 查找所需镜像并通过docker pull拉取
- 镜像:docker 真正的操作对象
- 容器:docker run 启动镜像会变成容器,容器顶层为一个可操作层,修改不会影响镜像。每个镜像可以启动生成多个容器。
docker工作原理
-
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker-Server接收到Docker-Client的指令,就会执行这个命令! -
当你启动或创建一个Docker容器时,只有容器内的激活进程运行时才能开始活动。如果开启一个daemonized进程,容器会立刻结束运行,因为该进程在前端不是激活状态。如果你在前端开启一个进程,容器能正常运行,直到该进程结束。这和其他的半虚拟化工具不同,其他的半虚拟化工具基本上在相同的主机上建立“正常的”虚拟服务器实例。即使前台进程未激活,这些实例也能正常运行。
docher基础
命令 | 功能 |
---|---|
docker search | 在Docker Hub中搜索镜像 |
docker pull | 从注册表中提取图像或存储库 |
docker images | 图片列表 |
docker create | 创建一个新的容器 |
docker start | 启动一个或多个停止的容器 |
docker run | 在新容器中运行命令 |
docker attach | 连接到正在运行的容器 |
docker ps | 列表容器 |
docker logs | 获取容器的日志 |
docker restart | 重启一个容器 |
docker stop | 停止一个或多个正在运行的容器 |
docker kill | 杀死一个或多个正在运行的容器 |
docker rm | 移除一个或多个容器 |
docker exec | 在正在运行的容器中运行命令 |
docker info | 显示整个系统的信息 |
docker inspect | 返回Docker对象的低级信息 |
- 搜索镜像
[root@docker ~]# docker search kali
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
kalilinux/kali-rolling Official Kali Linux image (weekly snapshot o… 303
kalilinux/kali Image built from the last official release 76
linuxkonsult/kali-metasploit Kali base image with metasploit 71 [OK]
booyaabes/kali-linux-full Kali image with kali-linux-full metapackage … 31 [OK]
- 下载镜像
[root@docker ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
33847f680f63: Already exists
d74938eee980: Pull complete
963cfdce5a0c: Pull complete
8d5a3cca778c: Pull complete
e06a573b193b: Pull complete
Digest: sha256:61e49dd08a51d6fc421ed257bd8eb461cf2d48269d9ab2b4ff5d4c69826c3c9c
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
- 查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 73b8cfec1155 5 days ago 138MB
- 查看本地容器进程
查看正在运行的容器进程
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
查看正在运行的容器进程(包括死的)
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f1881da8c86 httpd "httpd-foreground" 6 seconds ago Up 5 seconds 0.0.0.0:9000->80/tcp, :::9000->80/tcp httpd
- 容器启动
docker run 选项 容器 命令
选项:
-i:启动一个可交互容器,并持续打开标准输出
-t:表示使用终端关联到容器的标准输入输出上
-d:将容器放在后台执行
-rm:删除容器
--name:指定一个名称
-p:指定端口
-v:挂载目录
docker rm $(docker ps -aq) #删除所有容器
docker stop $(docker ps -aq) #停止所有容器
[root@docker ~]# docker run -p 9000:80 -d --name httpd httpd
6f1881da8c8661395e542f5fc43638f92ebeeb82ff0d55b31bc817697b7835aa
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f1881da8c86 httpd "httpd-foreground" About a minute ago Up About a minute 0.0.0.0:9000->80/tcp, :::9000->80/tcp httpd
停止容器
[root@docker ~]# docker stop httpd
httpd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f1881da8c86 httpd "httpd-foreground" About a minute ago Exited (0) 8 seconds ago httpd
启动容器
[root@docker ~]# docker start httpd
httpd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f1881da8c86 httpd "httpd-foreground" 2 minutes ago Up 2 seconds 0.0.0.0:9000->80/tcp, :::9000->80/tcp httpd
重启容器
[root@docker ~]# docker restart httpd
httpd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f1881da8c86 httpd "httpd-foreground" 4 minutes ago Up 5 seconds 0.0.0.0:9000->80/tcp, :::9000->80/tcp httpd
docker安装
配置yum
[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# vim docker-ce.repo
[Docker-ce]
name=Docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
安装和启动
yum -y install docker-ce
systemctl start docker
- docker加速
这里只是列子,具体用的是阿里云的加速
[root@docker ~]# cd /etc/docker/
[root@docker docker]# ls
key.json
[root@docker docker]# vim daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"] 这里是阿里云加速器地址
}
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.7
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
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
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
runc version: v1.0.0-0-g84113ee
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 4.18.0-257.el8.x86_64
Operating System: CentOS Stream 8
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.748GiB
Name: docker
ID: YHYS:DCPP:L666:7UCA:LH3F:RS3Q:62RZ:T3HS:CO6W:J7VC:6ZY5:T523
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
"https://docker.mirrors.ustc.edu.cn/" 这里显示的是自己的加速地址就说明成功
Live Restore Enabled: false