说在前面的话
Docker是一个开源的应用容器引擎,让开发者可以打包应用和相关的依赖到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,互相之间不会有任何的接口。Dokcer就像船搬运货物时一样,需要先拆了再装上。如果能把一切东西都放在一个集装箱里,我们就可以只搬运箱子,里面的货物也会随着移动。在我们实际开发中就会经常出现这种情况,某个功能在测试环境可以,但是到了生产环境就不行。Docker可以解决这些问题,保存开发环境和生产环境一致。
下面我们就走进Docker,先来看一个mysql容器的启动命令
docker run -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
可以看到mysql已经起起来了,并且我们通过密码123456连上了mysql
上面的命令执行了什么操作呢,看了下面的介绍我们就会有一个清晰的认识了!
环境信息:
docker info :显示docker系统信息,包含镜像和容器数
docker version :显示docker版本信息
容器生命周期管理:
docker run :运行容器的命令
docker start :启动一个或者多个已经被停止的容器
docker restart :重启容器
docker stop :停止一个运行中的容器
docker kill : 杀掉一个运行中的容器
docker rm : 删除一个或者多个容器
docker pause : 暂停容器中所有的进程
docker unpause :回复容器中所有的进程
docker create :创建一个新的容器但是不启动它
docker exec :在运行的容器中执行命令
举例:docker exec -it 容器名或者容器ID /bin/bash 进入到容器内部,然后通过快捷键ctrl+p+q可以从容器退出到宿主机
容器操作:
docker ps :列出容器
docker inspect :获取容器/镜像的元数据
docker top :查看容器中运行的进程信息,支持ps命令
docker attach :连接到正在运行中的容器
docker wait :阻塞运行直到容器停止,然后打印出它的退出代码
docker export :将文件系统作为一个tar归档文件导出STDOUT
docker port :列出指定的容器的端口映射
docker logs :获取容器的日志
docker events :从服务器获取实时事件
容器rootfs命令:
docker commit :从容器创建一个新的镜像
docker cp :用于容器与主机之间的数据拷贝
docker diff :检查容器里文件结构的更改
容器镜像仓库:
docker login :登录到一个docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub
docker logout :登出一个docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub
docker pull :从镜像仓库中拉取或者更新指定镜像
docker push :将本地的镜像上传到镜像仓库,首先要登录到镜像仓库
docker search :从镜像仓库中查找镜像
本地镜像管理:
docker build :用于使用Dockerfile创建镜像
docker images :列出本地镜像
docker rmi :删除本地一个或者多个镜像
docker tag :标记本地镜像,将其归入某一仓库
docker save :将指定镜像保存成tar归档文件
docker import :从归纳文档中创建镜像
docker load :导入使用docker save命令导出的镜像
docker history : 查看指定镜像的创建历史
docker run的OPTIONS参数说明
-d :指定容器运行于前台还是后台,默认是false(前台)
-i :打开STDIN,用户控制台交互
-t :分配tty设备,该可以支持终端登录,默认为false
-u :指定容器的用户
-a :登录容器(必须是以docker run -d启动的容器)
-w :指定容器的工作目录
-c :设置容器CPU权重,在CPU共享场景使用
-e :指定环境变量
-m :指定容器的内存上限
-p :指容器暴露的端口
-h :指定容器的主机名
-v :给容器挂载存储卷,挂载到宿主机的某个目录
--volume-from :给容器挂载其他容器上的卷
--cap-add :添加权限
--cap-drop :删除权限
--cidfile :运行容器后,在指定文件中写入容器PID值,是一种典型的监控系统用法
--cpuset :设置容器可以使用哪些cpu,此参数可以用来设置某些容器单独使用cpu
--device :添加主机设备给容器,相当于设备直通
--dns :指定容器的dns服务器
--dns-search :指定容器的dns搜索域名,写到容器的etc/resolv.conf文件
--entrypoint :覆盖image的入口点
--env-file :指定环境变量文件,文件格式为每行一个环境变量
--expose :指定容器暴露的端口
--link :指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf :指定容器的配置文件,只有在指定-exec-driver=lxc时使用
--name :指定容器的名字
--net="" :相关选项如下
- bridge:Docker默认的网络设置,此模式会为每一个容器分配一个Network Namespace、设置IP等,并将主机上的Docker容器连接到一个虚拟网桥上;
- host:容器使用主机的网络;
- containser:NAME_or_ID:使用其他容器的网络,共享IP和PORT等网络资源;
- none:容器使用自己独立的网络,但并没有对其进行任何网络设置,如分配veth pair和网桥连接、配置等。
--privileged=false :指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="" :指定容器停止后的重启策略
- no:不重启;
- on-failure容器故障退出时重启;
- always:容器退出时总是重启。
--rm=false :指定容器停止后自动删除容器(不支持以docker run -d 启动的容器)
--sign-proxy=true :设置由代理接受并处理信息,但SIGCHLD、SIGSTOP和SIGKILL不能被代理