目录
3、标签(Tag)、Dockfile、docker-compose.yml
1、docker image 与 docker images的不同?
2、docker run 与 docker start的不同?
3、docker stop 与 docker kill的不同?
一、简介
1、docker与虚拟机的对比
|
2、Docker的镜像、容器、仓库
Docker 由镜像(Image)、容器(Container)、仓库(Repository) 三部分组成。
镜像(Image):1.是创建容器的基础 2.镜像是容器的模版 3.容器是镜像的实例 4.docker images查看本地镜像列表
容器(Container):1.包含了应用及其需要的环境 2.是应用的运行时表现形式 3.docker ps -a查看本地运行过的容器
仓库(Repository):1.存放镜像的地方 2.推送(push)与拉取(pull)
===>官方仓库:https://hub.docker.com
===>阿里云仓库:https://cr.console.aliyun.com
3、标签(Tag)、Dockfile、docker-compose.yml
标签(Tag):1.镜像版本号 2.mysl:latest 或 mysql:8
Dockfile:1.镜像描述文件 2.基于Dockfile生成镜像
docker-compose.yml:1.容器编排,同时管理多个容器 2.同时创建,运行,销毁多个容器
4、docker run命令详解
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
02.
03. -d, --detach=false 指定容器运行于前台还是后台,默认为false
04. -i, --interactive=false 打开STDIN,用于控制台交互
05. -t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
06. -u, --user="" 指定容器的用户
07. -a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
08. -w, --workdir="" 指定容器的工作目录
09. -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
10. -e, --env=[] 指定环境变量,容器中可以使用该环境变量
11. -m, --memory="" 指定容器的内存上限
12. -P, --publish-all=false 指定容器暴露的端口
13. -p, --publish=[] 指定容器暴露的端口
14. -h, --hostname="" 指定容器的主机名
15. -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
16. --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
17. --cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
18. --cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
19. --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
20. --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
21. --device=[] 添加主机设备给容器,相当于设备直通
22. --dns=[] 指定容器的dns服务器
23. --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
24. --entrypoint="" 覆盖image的入口点
25. --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
26. --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
27. --link=[] 指定容器间的关联,使用其他容器的IP、env等信息
28. --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
29. --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
30. --net="bridge" 容器网络设置:
31. bridge 使用docker daemon指定的网桥
32. host //容器使用主机的网络
33. container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
34. none 容器使用自己的网络(类似--net=bridge),但是不进行配置
35. --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
36. --restart="no" 指定容器停止后的重启策略:
37. no:容器退出时不重启
38. on-failure:容器故障退出(返回值非零)时重启
39. always:容器退出时总是重启
40. --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
41. --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
5、docker相关命令
镜像操作: docker images/rmi/tag/history 容器操作: docker start/stop/kill/pause/unpause docker wait/logs/attach/inspect/port/top/ps/rm/exec 镜像与容器操作: docker create/commit/run/cp/diff docker import/export/load/save/load/save docker filesystem 仓库操作: docker pull/push/search/login/logout 引擎操作: docker version/info/events |
docker命令大全,点击command可直接跳转到官方链接。
Command | Description | 中文解释 |
---|---|---|
docker attach | Attach local standard input, output, and error streams to a running container | 将本地标准输入,输出和错误流附加到正在运行的容器 |
docker build | Build an image from a Dockerfile | 从Dockerfile构建映像 |
docker builder | Manage builds | 管理构建 |
docker checkpoint | Manage checkpoints | 管理检查点 |
docker commit | Create a new image from a container’s changes | 根据容器的更改创建新镜像 |
docker config | Manage Docker configs | 管理Docker配置 |
docker container | Manage containers | 管理容器 |
docker cp | Copy files/folders between a container and the local filesystem | 在容器和本地文件系统之间复制文件/文件夹 |
docker create | Create a new container | 创建一个新的容器 |
docker deploy | Deploy a new stack or update an existing stack | 部署新堆栈或更新现有堆栈 |
docker diff | Inspect changes to files or directories on a container’s filesystem | 检查容器文件系统上文件或目录的更改 |
docker engine | Manage the docker engine | 管理Docker引擎 |
docker events | Get real time events from the server | 从服务器获取实时事件 |
docker exec | Run a command in a running container | 在正在运行的容器中运行命令 |
docker export | Export a container’s filesystem as a tar archive | 将容器的文件系统导出为tar存档 |
docker history | Show the history of an image | 显示镜像的历史记录 |
docker image | Manage images | 管理镜像 |
docker images | List images | 列出镜像 |
docker import | Import the contents from a tarball to create a filesystem image | 从tarball导入内容以创建文件系统映像 |
docker info | Display system-wide information | 显示系统范围的信息 |
docker inspect | Return low-level information on Docker objects | 返回有关Docker对象的底层信息 |
docker kill | Kill one or more running containers | 杀死一个或多个正在运行的容器 |
docker load | Load an image from a tar archive or STDIN | 从tar存档或STDIN加载镜像 |
docker login | Log in to a Docker registry | 登录Docker注册表 |
docker logout | Log out from a Docker registry | 从Docker注册表注销 |
docker logs | Fetch the logs of a container | 提取容器的日志 |
docker manifest | Manage Docker image manifests and manifest lists | 管理Docker映像清单和清单清单= |
docker network | Manage networks | 管理网络 |
docker node | Manage Swarm nodes | 管理Swarm节点 |
docker pause | Pause all processes within one or more containers | 暂停一个或多个容器中的所有进程 |
docker plugin | Manage plugins | 管理插件 |
docker port | List port mappings or a specific mapping for the container | 列出端口映射或容器的特定映射 |
docker ps | List containers | 列出容器 |
docker pull | Pull an image or a repository from a registry | 从注册表中提取镜像或存储库 |
docker push | Push an image or a repository to a registry | 将映像或存储库推送到注册表 |
docker rename | Rename a container | 重命名容器 |
docker restart | Restart one or more containers | 重新启动一个或多个容器 |
docker rm | Remove one or more containers | 删除一个或多个容器 |
docker rmi | Remove one or more images | 删除一个或多个镜像 |
docker run | Run a command in a new container | 在新容器中运行命令 |
docker save | Save one or more images to a tar archive (streamed to STDOUT by default) | 将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT) |
docker search | Search the Docker Hub for images | 在Docker Hub中搜索镜像 |
docker secret | Manage Docker secrets | 管理Docker密钥 |
docker service | Manage services | 管理服务 |
docker stack | Manage Docker stacks | 管理Docker堆栈 |
docker start | Start one or more stopped containers | 启动一个或多个已停止的容器 |
docker stats | Display a live stream of container(s) resource usage statistics | 显示实时的容器资源使用情况统计流 |
docker stop | Stop one or more running containers | 停止一个或多个运行中的容器 |
docker swarm | Manage Swarm | 管理群 |
docker system | Manage Docker | 管理Docker |
docker tag | Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE | 创建引用了SOURCE_IMAGE的标签TARGET_IMAGE |
docker top | Display the running processes of a container | 显示容器的运行过程 |
docker trust | Manage trust on Docker images | 管理对Docker映像的信任 |
docker unpause | Unpause all processes within one or more containers | 取消暂停一个或多个容器中的所有进程 |
docker update | Update configuration of one or more containers | 更新一个或多个容器的配置 |
docker version | Show the Docker version information | 显示Docker版本信息 |
docker volume | Manage volumes | 管理卷 |
docker wait | Block until one or more containers stop, then print their exit codes | 阻塞直到一个或多个容器停止,然后打印其退出代码 |
二、相关问答
1、docker image 与 docker images的不同?
docker image(管理镜像) 与 docker images(列出镜像)
2、docker run 与 docker start的不同?
docker run = docker create + docker start
docker run 每次使用都会创建一个新的容器
docker start 重新启动已存在的镜像
上左图:第一次启动docker run,Docker首先在本机中寻找该镜像,如果没有安装,Docker 在 Docker Hub 上查找该镜像并下载安装到本机,最后 Docker 创建一个新的容器并启动该程序(本机查找---Docker Hub查找---下载安装到本机---创建容器---启动程序)。上右图:当第二次执行 docker run 时,因为 Docker 在本机中已经安装该镜像,所以 Docker 会直接创建一个新的容器并启动该程序。注意的是,docker run 每次使用都会创建一个新的容器,因此,我们以后再次启动这个容器时,只需要使用命令 docker start 即可。Docker 容器重启后会沿用 docker run
命令指定的参数来运行,但是,此时它还是后台运行的。我们必须通过 docker attach
命令切换到运行交互式容器
3、docker stop 与 docker kill的不同?
docker stop 发送 SIGTERM 信号,而 docker kill 发送SIGKILL 信号。
4、Docker构建镜像有哪两种方式?
一种方式是使用docker commit命令,另外一种方式使用docker build命令和Dockerfile文件。
不推荐使用docker commit命令进行构建,因为它没有使得整个流程标准化。建议使用Dockerfile文件可以让构建镜像更具备可重复性,同时保证启动脚本和运行程序的标准化。
三、Docker安装配置
1、docker安装使用指南
官方指南:https://docs.docker.com/install/
阿里云指南:https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.468b1991jdT95t
2、Docker安装
先在https://hub.docker.com/注册账号。
3、下载
官方下载地址(Mac):https://download.docker.com/mac/stable/Docker.dmg
阿里云下载地址(Mac):http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/?spm=5176.8351553.0.0.468b1991jdT95t
阿里云下载地址(Windows): http://mirrors.aliyun.com/docker-toolbox/windows/docker-for-windows/
4、安装
双击刚刚下载的 Doker.dmg 安装包进行安装。安装完成后启动, Mac 顶部导航栏出现了一个图标,通过菜单可以进行 docker 配置和退出等操作。
5、设置加速服务
右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中将https://xxx.mirror.aliyuncs.com 加到"registry-mirrors"的数组里,点击 Apply & Restart 按钮,等待 Docker 重启并应用配置的镜像加速器。
详见:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
6、查看版本:docker version
四、Docker搭建web服务器
1、首先拉取centos镜像
docker run -p 80 --name web -i -t centos /bin/bash
--name web |
告诉Docker创建一个名称是web的容器,如果不指定,Docker会为我们创建的每一个容器自动生成一个随机的名称 |
-p 80 |
告诉Docker开放80端口 |
-i |
告诉Docker容器保持标准输入流对容器开放,即使容器没有终端连接 |
-t |
告诉Docker为容器分配一个虚拟终端,以便于我们接下来安装 Nginx 服务器 |
-d |
告诉Docker在后台运行容器的守护进程 |
其中,docker run详见 三(2) 的解析
2、安装Nginx源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
3、安装Nginx
yum install -y nginx
4、查看Nginx路径,启动Nginx
whereis nginx:可以看到安装的路径了,将Nginx跑起来:nginx
5、访问Web服务器Nginx
执行ctrl+P+Q切换到后台,然后通过docker ps -a来查看随机分配的端口。如下分配的端口是32769 ,那么通过浏览器访问http://127.0.0.1:32769即可。
五、Docker搭建自己的镜像
1、创建Dockerfile文件
mkdir dockerfile_test
cd dockerfile_test/
touch Dockerfile
nano Dockerfile
其中,nano实际就是进去编辑,跟vi差不多。
2、编写Dockerfile文件的代码
FROM centos:7
MAINTAINER LiangGzone "[email protected]"
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx
EXPOSE 80
3、Dockerfile指令详解
FROM centos:7 | Docker 需要依赖于一个基础镜像进行构建。这里,我们指定 centos 作为基础镜像,它的版本是 7 (CentOS 7)。 |
MAINTAINER LiangGzone "[email protected]" | 指定该镜像的作者是 LiangGzone,邮箱是 [email protected]。这有助于告诉使用者它的作者和联系方式。 |
EXPOSE 80 | 暴露 Dokcer 容器的 80 端口 |
4、docker build命令构建镜像
docker build -t="lianggzone/nginx_demo:v1" .
- t 告诉 Docker 镜像的名称和版本。 |
没有指定任何标签,Docker 将会自动为镜像设置一个 lastest 标签。 |
最后还有一个 . 是为了让 Docker 到当前本地目录去寻找 Dockerfile 文件。 |
Docker 会在每一步构建都会将结果提交为镜像,然后将之前的镜像层看作缓存,因此我们重新构建类似的镜像层时会直接复用之前的镜像。如果我们需要跳过,可以使用 --no-cache 选项告诉 Docker 不进行缓存。 |