Docker基础

Docker

  1. 新技术:迫切需要运行环境和os解耦,支持启动即服务镜像
  2. 容器基础操作
bash 复制代码
查看docker版本
docker version

查看docker系统信息
docker info 

查看container信息
docker ps [options]
列出所有运行中的容器
-a 列出所有容器(含沉睡镜像)
-f [exited=<int>] 列出满足exited=<int>条件的容器;
-l 仅列出最新创建的一个容器
--no-trunc 显示完整的容器ID
-n=4 列出最近创建的4个容器
-q 仅列出容器的ID
-s 显示容器大小

创建容器
docker create [options] image:tag
docker create创建的容器处于停止状态,可以用docker start 命令进行启动

启动、停止和重启一个或多个指定容器
docker start|stop|restart [options] <container> [container...]
-a 待完成
-i 启动一个容器并进入交互模式
-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程

杀死一个或多个指定容器进程
docker kill 
docker kill [options] <container> [container...]
-s "KILL" 自定义发送容器的信号

删除一个容器
docker run
docker rm [options] <container> [container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis
-f 移除该容器,即使其正在运行
-l 移除容器间的网络连接,而非容器本身
-v 移除与容器关联的空间

进入一个容器
docker attach/docker exec
docker attach <containername>
docker exec -it <containerId> /bin/bash
attach 命令弹出的窗口同步显示,一个阻塞,其他窗口也无法操作 

启动容器
docker run 
docker run [options] <image> [command] [arg...]
启动一个容器,在其中运行指定命令
-a stdin 指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR 三项
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i 同时使用
--name="nginx-lb"为容器指定一个名称
--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
--dns-search examp.com 指定容器DNS搜索域名,默认和宿主一致
-h "mars" 指定容器的hostname
-e username="ritchie" 设置环境变量
--env-file=[] 从指定文件读入环境变量
--cpuset="0-2" or --cpucet="0,1,2" 绑定容器指定cpu运行
--net="bridge" 指定容器的网络连接类型,支持bridge/host/none container:<name|id>四种类型

其他指令
docker login  登录DockerHub
docker logout 登出DockerHub
docker history <image> 查看指定镜像的构建历史
docker pause|unpause 暂停和恢复指定容器的进程
docker logs <container> 查看指定容器的输入日志 

镜像和容器有什么区别?

镜像和容器的唯一区别在于容器的最上面一层是可读可写的。

要点:容器=镜像+可读层
镜像的基础操作

bash 复制代码
查看镜像
docker images
docker images [options] [name]
列出本地所有镜像,其中[name]对镜像名称进行关键字查询
-a 列出所有镜像 (含过程镜像)
-f 过滤镜像,如:-f ['dangling=true'] 只列出满足dangling=true 条件的镜像;
--no-trunc 可显示完整的镜像ID;
-q 仅列出镜像ID
--tree 以树状结构列出镜像的所有提交历史

查看镜像
检查镜像的详细信息 默认返回JSON格式
docker inspect 
docker inspect image:tag
docker inspect imageId
-f 指定返回值的模板文件

删除镜像
docker rmi
docker rmi [options] <image> [image...]
docker rmi nginx:latest postgres:latest
从本地移除一个或多个指定的镜像
-f 强行移除该镜像,即使其正被使用
--no-prune 不移除该镜像的过程镜像,默认移除

搜索镜像
docker search
docker search [options] term
docker search -S 10 django
从Docker Hub中搜索符合条件的镜像。
--automated=false 只列出自动创建类型的镜像
--no-trunc=false 输出信息不截断显示
-s,--stars=3 仅显示评价为指定星级以上的镜像

下载镜像
docker pull
docker pull name[:tag]
docker pull domain[:port]/name[:tag]
从Docker Hub 中拉取或者更新指定镜像

上传镜像 
docker push 
docker push name[:tag]
docker push domain[:port]/name[:tag]
上传镜像到仓库,默认上传到DockerHub官方仓库

如何给镜像打标签
docker tag
docker tag [name:tag]|[image] newname:tag
给指定的镜像打上新的标签

基于Dockerfile构建镜像
docker build 
docker build [options] path | url | -
docker build -t sun/nginx:2.0 - < Dockerfile
以 Dockerfile为模板构建容器。
--force-rm=false 		构建失败后,移除中间容器
--no-cache=false	 	构建过程不适用缓存;
--rm=true        		构建成功后移除中间容器
-t sun/nginx:2.0 		为创建的容器打上标签

导出镜像
docker save
docker save -o debian.tar [name:tag]|[imageId]
docker save > debian.tar [name:tag]|[imageId]
将指定镜像保存成tar 归档文件,docker load的逆操作。
保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
-o "debian.tar" 指定保存的镜像归档

导入镜像
docker load 
docker load [options]
docker load < debian.tar
docker load -i "debian.tar"
从tar镜像归档中载入镜像,docker save的逆操作
保存后再加载(saved-loader)的镜像不会丢失提交历史和层,可以回滚
-i "debian.tar" 指定载入的镜像归档。

导出镜像 -2
docker export 
docker export <container>
docker export nginx-01 > export.tar
将指定的容器保存成tar归档文件,docker import的逆操作
导出后导入(export-imported)的容器会丢失所有的提交历史,无法回滚。

导入镜像 -2
docker import
docker import url | -[repository[:tag]]
cat export.tar | docker import - imported-nginx:latest
docker import http://example.com/export.tar
从归档文件(支持远程文件)创建一个镜像,export 的逆操作,可为导入镜像打上标签。
导出后导入(exported-imported)的容器会丢失所有的提交历史,无法回滚。


如何构建,提交镜像 
docker commit
docker commit [options] container [repository[:tag]]
docker commit -a 'bocloud' 4d5d6fd tomcat:8.0
-a,--author="作者信息"
-m,--message="提交信息"
-p,--pause=true       提交时,暂停容器运行

一个简单的Dockerfile

bash 复制代码
# This dockerfile use the centos image
#VERSION 2 - EDITION 1
#Author:docker_user
#第一行必须指定基于的基础镜像
FROM centos
#维护者信息
MAINTAINER  bocloud
#镜像的操作指令
RUN echo "hello docker" >>/etc/apt/firstdocker
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#容器启动时的执行指令 
CMD /user/sbin/nginx

Dockerfile常用指令

bash 复制代码
FROM <IMAGE[:TAG]>   	指定基础镜像
MAINTAINER  <NAME> 		维护者信息
RUN ["EXECUTABLE","PARAM1","PARAM2"]	当前镜像基础上执行指令
CMD["EXECUTABLE","PARAM1","PARAM2"]   	指定启动容器时执行的指令,只能有一条
EXPOSE <PORT>[<PORT>...]				指定Docker宿主机暴露的端口号
ENV <KEY> <VALUE> 						指定一个环境变量,后续被RUN命令使用
ADD <SRC> <DEST>						复制指定的SRC到容器中的DEST,相对或绝对路径(文件|目录)
COPY <SRC> <DEST>						复制本地主机的SRC到容器中的DEST,自动创建目标路径

ENTRYPOINT["EXECUTABLE","PARAM1","PARAM2"]  指定启动容器时执行的指令,不可被docker run 覆盖,不可被docker run 覆盖,多个时只有最后一个生效
VOLUME["/DATA"]							创建一个本期或者其他容器的挂载点,数据库,需要保持的数据等
USER daemon								指定运行容器时的用户名或UID 后续的RUN 也会使用指定的用户
WORKDIR PATH							指定配置工作目录
ONBUILD									[指令]配置当所创建的镜像为其他新创建镜像的基础镜像时所执行的操作
相关推荐
yohoo菜鸟43 分钟前
kubernetes简单入门实战
云原生·容器·kubernetes
落非1 小时前
Ubuntu配置阿里云docker apt源
ubuntu·阿里云·docker
不会编程的懒洋洋1 小时前
Spring Cloud Eureka 服务注册与发现
java·笔记·后端·学习·spring·spring cloud·eureka
x2lab3 小时前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
mit6.8244 小时前
[Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
linux·运维·docker·容器·架构
qq_167401514 小时前
Docker 组添加用户,设置允许普通用户操作 docker
docker·容器
Z1eaf_complete4 小时前
Docker的基础使用
运维·docker·容器·云计算
李少兄6 小时前
Docker 命令总结:从入门到入土
docker·容器·eureka
想学习java初学者7 小时前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
WEIII8 小时前
MySQL 主从复制原理与搭建实践
后端·mysql·docker