目录
一、Docker介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 。Docker 可以打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker的容器是完全使用沙箱机制。
为什么需要沙箱机制?什么是沙箱机制?
为什么需要沙箱机制?
默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
(1) 为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
(2) 为程序提供一个受限的运行环境:这就是沙箱机制
什么是沙箱机制?
如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。常见的沙箱机制:java的虚拟机JVM、Javascript的虚拟机V8引擎。
二、Docker的优点
Docker 最主要的优点就是可以解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。能够将现有的应用程序部署在其它机器上。
同样虚拟机也可以实现,Docker相较于虚拟机的优点:
- Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。
- 启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;而启动 Docker 相当于启动宿主操作系统上的一个进程。
- 虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker
- 部署方便。
三、安装Docker
附赠window安装教程:https://www.runoob.com/docker/windows-docker-install.html
MacOS安装教程:https://www.runoob.com/docker/macos-docker-install.html
CentOS安装教程:https://www.runoob.com/docker/centos-docker-install.html
对于win10家庭版的,需要安装 Hyper-V(微软开发的虚拟机)
成功安装Hyper-V之后,启动任务管理器,查看性能就可以看到:虚拟化
这时候就可以启动Docker了
四、Docker的组成
一个完整的Docker有以下几个部分组成:
1.DockerClient客户端
2.Docker Daemon守护进程
3.Docker Image镜像
镜像是容器的基石,容器基于镜像启动,镜像就像是容器的源代码,保存了用于容器启动的各种条件。
4.DockerContainer容器
通过镜像启动:容器是docker的执行单元。启动和执行:镜像如果是构建和打包阶段,则容器是启动和执行阶段。容器启动过程:启动时在镜像的最顶层加一个可写的文件系统,即可写层。Docker中运行的程序就是在这个层中执行的。docker第一次启动一个容器时,可写层是空的,当文件系统发生变化,都会应用到这一层。如果想修改一个文件,该文件首先会从可读写层下边的只读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。这个是docker的重要机制,写时复制。
5.Docker Registry 仓库
存放用户构建的镜像
问题:是否不理解容器与镜像?
百度之后大概对镜像与容器有一定的基础概念理解:
https://www.jb51.net/article/95259.htm
http://dockone.io/article/9249
http://www.dockerone.com/article/783
五、启动Docker
在启动Docker之前,我们可以先设置Docker 镜像加速
在Registrymirror中填入加速地址,通过命令 Docker info查看镜像地址:
国内有很多镜像加速地址:
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
Docker的镜像仓库地址:https://hub.docker.com/
镜像命令:
Commands:
build Build an image from a Dockerfile(构建镜像的命令)
history Show the history of an image(显示镜像构建历史过程)
import Import the contents from a tarball to create a filesystem image(导入一个由容器导出的镜像)
inspect Display detailed information on one or more images(显示一个镜像的详细信息)
load Load an image from a tar archive or STDIN(从一个文件或标准输入流中导入镜像)
ls List images(查看镜像列表)
prune Remove unused images(删除虚悬镜像)
pull Pull an image or a repository from a registry(从仓库拉取镜像)
push Push an image or a repository to a registry(推送镜像到仓库)
rm Remove one or more images(删除镜像)
save Save one or more images to a tar archive(streamed to STDOUT by default)(保存镜像到文件)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE(给镜像打标签)
容器命令:
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes(把容器保存为镜像)
cp Copy files/folders between a container and the local filesystem
create Create a new container(创建一个新的容器)
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container(在一个运行的容器中执行命令)
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers(杀死一个或多个正在运行的容器)
logs Fetch the logs of a container
ls List containers(显示本地容器列表)
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container(重命名容器)
restart Restart one or more containers(重启一个或多个容器)
rm Remove one or more containers(删除一个或多个容器)
run Run a command in a new container(运行一个新的容器)
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers(停止一个或多个容器)
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
获取镜像:
docker pull ubuntu
启动容器:
docker run -it ubuntu /bin/bash。
该条命令参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
docker run命令有一些比较常用的参数,比如容器是一种提供服务的守护进程,那么通常需要开放端口供外部访问,如:
$ docker run -p 80:80 nginx
也可以为容器指定一个名称,如:
$ docker run -p 80:80 --name webserver nginx
另外一种则是使用docker start命令重新启动已经停止运行的容器,如:
# container_id表示容器的id
$ docker start container_id
六、安装Nginx
1、查看可用的 Nginx 版本
访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags
或者使用命令查看可用版本:docker search nginx
2、取最新版的 Nginx 镜像
docker pull nginx:latest
3、查看本地镜像
docker images 或者 docker image ls
4、删除镜像:
docker rmi image_id
对于已经创建了容器的镜像,删除镜像时会报错:Error response from daemon: conflict: unable to remove repository reference xxx。此时删除方法有两种:
一种是先把容器删除,再删除镜像,另一种则只需要在删除镜像的命令中跟一个-f参数便可,如:
$ docker rim -f image_id
5、运行容器
docker run --name nginx-test -p 8080:80 -d nginx
- --name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行
这时,nginx就启动成功了,点击地址查看:http://localhost:8080/ nginx是否运行成功
6、删除容器
docker rm container_id
7、进入容器
$ docker exec -it container_id /bin/bash
进入容器之后,命令就跟linux命令差不多,可以进行修改配置文件等
输入命令 exit 可以退出容器,退出并没有停止容器运行
8、停止容器
docker stop container_id
七、Docker命令大全
欲练docker大法,必先学习此功,赠一本docker秘籍。点此获取秘籍地址