docker安装
sudo apt-get update 更新源 sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common 安装GPG证书 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" 更新并安装 Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce
error:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
根据错误信息可知是权限问题 。
可能是使用非root用户启用docker导致的,Docker进程使用Unix Socket而不是TCP端口,而默认情况下,Unix socket属于root用户,因此需要root权限才能访问。
将当前用户加入到docker组中 sudo gpasswd -a ubuntu docker ubuntu 用户名 docker 组名
定制镜像:
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile 文件 From ubuntu:16.04 MAINTAINER "author" # 指定作者 RUN mkdir mydocker # 执行命令 RUN touch index RUN echo "this is docker" > mydocker/index RUN cat mydocker/index RUN echo "this is my docker" > mydocker/index RUN cat mydocker/index 构建镜像 docker build -t mydocker:v1 . mydocker:v1 镜像名:标签 . 表示上下文路径
启动容器:
1. docker run -it --rm ubuntu:16.04 bash (进行交互式操作) -it: -i 交互式操作 -t 终端 ubuntu:16.04 镜像名字及标签 --rm:这个参数是说容器退出后随之将其删除 bash: 命令,这里我们想要一个交互式的shell 2. docker run --name web2 -d -p 8081:8080 nginx:v2 81:80 81映射到宿主机的端口号 80 内部程序端口号 容器启动后, 直接通过http://ip:8081/xx 访问即可
删除镜像:
docker rmi 镜像id 若镜像无对应的容器存在时可直接删除
镜像有对应的容器存在时 先删除容器再删除镜像
首先列出当前所有的容器 docker ps -a
然后找到 image镜像 对应的容器,通过容器 id 关闭容器并删除容器
然后根据镜像id 删除该镜像
关键点
1. 删除容器前需要先关闭容器 stop
2. 删除镜像 docker rmi ID 删除容器 docker rm ID
3. 先关闭删除容器,再删除镜像。