Docker初级
service docker restart
systemctl status docker 查看docker服务状态
docker daemon 守护进程
docker不需要硬件虚拟化,所以比虚拟机快的多
338)(C:\Users\sd\AppData\Roaming\Typora\typora-user-images\image-20210428220646082.png)]
镜像命令
-
docker build 构建镜像
-
docker pull[:TAG] 拉取镜像
-
docker run 启动
-
docker info docker信息
-
docker --help
-
docker image 本地镜像
-
docker image -a 全部镜像(a=all)
-
docker image -q 只显示 镜像ID
-
docker image --digests :显示镜像的摘要信息
-
docker image --no-trunc:显示完整的镜像信息(不必记)
-
docker search 在docker hub上寻找镜像
-
docker rmi 某个镜像名字ID
-
docker rmi tomcat nginx 删除两个镜像
-
docker rmi -f $(docker image -qa) 删除全部镜像
Ubuntu镜像只有170M大小
容器命令
docker run [OPTION] image [COMMAND] [ARG]
OPTION说明(常用):有些是一个减号,有些是两个减号
-
–name=“容器新名字”:为容器指定一个名称
-
-d :后台运行容器,并返回容器id,也即启动守护式容器
-
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用
-
-P: 随机映射端口
-
-p :指定端口映射
格式 hostPort:containerPort
exit : 退出docker,并关闭容器
Ctrl+P+Q : 退出而不关闭容器:
-
docker ps 显示所有正在运行的容器
-
docker ps -a 显示所有容器
-
-a:列出当前所有的容器(all)
-
-l:显示最近创建的容器(latest)
-
docker save ID 保存的镜像 例:docker save -o nginx.tar nginx:latest
-
docker export ID 保存的容器
-
docker load 名 字 载入镜像包
-
docker
-
docker start 启动容器
-
docker restart 重启容器
-
docker stop 停止容器
-
docker kill 强制停止
-
docker logs 容器ID :查看容器日志
-
docker top 容器ID :查看容器内运行的进程
-
docker inspect 容器ID :查看容器内部细节
-
docker attach : 是在容器中打开新的终端,并且可以启动新的进程
-
docker exec : 直接进入容器启动命令的终端,不会启动新的进程(因此exit会造成容器的停止)
-
docker cp 容器ID:容器内路径 目的主机路径 :从容器中拷贝文件到主机上
-
docker commmit 提交容器副本使之成为一个新的镜像
- docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
docker镜像
- 镜像就是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。
docker 容器数据卷
容器被删除后,数据就没了,为了保存数据,使用卷
- 添加方式
- 直接命令添加:docker run -it 镜像名 -v 、宿主机绝对路径目录:、容器类目录
- Dockerfile添加
Dockerfile
- 根目录下新建mydocker文件夹并进入
- 可在Dockerfile中使用VOLUME指令来给镜像添加一个或者多个数据卷
-
- File构建
- 2 build后生成镜像
-
- run容器
- 手写编写一个dockerfile文件,当然,必须要符合file的规范
- docker build
- docker run
dockerfile内容基础知识
dockerfile内容基础知识
1:每条保留字指令都必须为大写字母且后面至少跟随一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交
-
Dockerfile体系结构
- FROM 基础镜像,当前新镜像是基于哪个镜像的
- MAINTAINER 镜像维护者的姓名和邮箱地址
- RUN 容器构建时需要运行的命令
- EXPOSE 当前容器对外暴露的端口号
- WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个
- ENV 用来在构建镜像过程中设置环境变量
- ADD 将宿主机下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包(拷贝+解压)
- COPY 只拷贝不解压
- VOLUME 容器数据卷
- CMD 指定一个容器启动时要运行的命令,DockerFile可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
- ENTRYPOINT 指定一个容器启动时要运行的命令,不只是最后一个生效,不会覆盖,只会追加
- ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像再被子继承后父镜像的onbuild被触发
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROIMSy1d-1620820108341)(C:\Users\sd\AppData\Roaming\Typora\typora-user-images\image-20210429214831627.png)]
Docker Compose
定位:
定义和运行多个Docker容器的应用,负责对Docker容器集群的快速编排
由一个单独的docker-compose.yml文件来定义
核心概念
服务(service):一个应用的容器。服务可以存在多个。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml 文件中定义。
Compose使用
1.下载安装
2. 修改操作权限
yml文件
version: 3.0
#compose的版本号,目前版本最高为4.0
services:
tomcat:#服务名唯一
image: tomcat:8.0-jre8 #创建当前这个服务使用镜像是谁
ports:
-8080:8080
volumes:#完成宿主机与容器中目录数据卷共享
-
-
docker-compose up 启动这个项目的所有服务,必须保证运行命令的目录存在docker-compose.yml
IPC:进程间通信,进程间通信是指两个进程的数据之间产生交互
network_mode: host # Docker中的host模式指定是容器与主机享受相同的network namespace,在这种情况下,我们访问主机端口就能访问我们的容器。
实验室数据
docker仓库
192.168.9.1:5000
#用来查看docker仓库所有镜像的脚本
import requests
import json
import traceback
repo_ip = '192.168.9.1'
repo_port = 5000
def getImagesNames(repo_ip,repo_port):
docker_images = []
try:
url = "http://" + repo_ip + ":" +str(repo_port) + "/v2/_catalog"
res =requests.get(url).content.strip()
res_dic = json.loads(res)
images_type = res_dic['repositories']
for i in images_type:
url2 = "http://" + repo_ip + ":" +str(repo_port) +"/v2/" + str(i) + "/tags/list"
res2 =requests.get(url2).content.strip()
res_dic2 = json.loads(res2)
name = res_dic2['name']
tags = res_dic2['tags']
for tag in tags:
docker_name = str(repo_ip) + ":" + str(repo_port) + "/" + name + ":" + tag
docker_images.append(docker_name)
print docker_name
except:
traceback.print_exc()
return docker_images
a=getImagesNames(repo_ip, repo_port)
# print a
bridge networks
在网络方面,桥接网络是一个网段之内转发流量的链路层设备。网桥可以是一个硬件设备或者是一个运行在主机核心内的软件设备。
在Docker方面,桥接网络使用软件网桥,允许容器连接到同一个网桥网格进行通信。当容器需要提供隔离时便不需要连接到这个网桥。Docker的网桥驱动自动将相关的规则、配置安装在主机,这样容器在不同的桥接网络不允许彼此直接通信。
管理用户自定义网桥
使用docker network create命令创建用户自定义桥接网络
docker network create my-net
使用docker network rm命令删除用户自定义桥接网络。如果容器目前已连接此网络,请先断开它们。
docker network rm my-net
将容器连接到用户自定义网桥
docker network ls #查看网络
docker create --name my-nginx
--network my-net
--publish 8080:80
nginx:latest
这个例子将Nginx容器连接到my-net网络,连接到my-net网络的任何其他容器都可以访问my-nginx容器上的所有端口,反之亦然。
将一个运行中的容器连接到一个现有的用户自定义网桥,使用docker network connect命令。以下的命令将已经在运行的my-nginx容器连接到已经存在的my-net网络。
$ docker network connect my-net my-nginx
docker create --name my-nginx
--network my-net
--publish 8080:80
nginx:latest
这个例子将Nginx容器连接到my-net网络,连接到my-net网络的任何其他容器都可以访问my-nginx容器上的所有端口,反之亦然。
将一个运行中的容器连接到一个现有的用户自定义网桥,使用docker network connect命令。以下的命令将已经在运行的my-nginx容器连接到已经存在的my-net网络。
$ docker network connect my-net my-nginx