Docker学习资料及填坑

1. 介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

2. 结构

Docker学习资料及填坑

3. Docker 在centos上的安装

https://www.cnblogs.com/yu-hailong/p/7629120.html

4. Docker 常用命令

http://www.runoob.com/docker/docker-command-manual.html

5. Dockerfile 命令详解

https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

6. Docker-Compose微服务编排

https://www.cnblogs.com/neptunemoon/p/6512121.html

7. Docker集群化工具

Kubernetes、Mesos,Fleet和Swarm

8. 填坑

修改Docker的镜像存储位置

vim /etc/systemd/system/docker.service.d/docker.conf 
[Service] 
ExecStart= 
ExecStart=/usr/bin/dockerd --graph=/home/docker/docker_home --storage-driver=devicemapper

重新启动docker

如何使用镜像

一般的镜像由Linux系统来构建,一般使用官方提供的镜像
使用下面命令来搜索镜像

docker search ${img_name}

下面以搜索rabbmq为例:
Docker学习资料及填坑
其中标注OFFICIAL为[OK]的为官方镜像,其余的全部为私人构建的镜像
一般使用镜像由两种方式:

  1. 官方文档
  2. 进入容器内部查看相关信息,自行研究使用
    一般容器的使用涉及到的无非三个问题:
    1. 相关目录的挂载问题
    2. 宿主机和容器挂载目录权限问题
    3. 端口映射的问题

关于容器权限的问题

在构建镜像时,有时需要挂载宿主机指定目录到容器中,但是如果容器中使用root用户会造成很多问题,为此,如果容器使用某一用户进行启动,那么请配置容器内部用户与宿主机用户的uid要一致,否则可能造成文件没有权限访问的问题,挂载目录时使用特权模式运行 --privileged=true

关于第一次镜像运行第一次启动成功,但第二次启动失败的问题

因为容器时占有宿主机一部分资源的(端口等等),所以当一些不可重复利用的资源被使用时,运行镜像就会报错,这时候使用命令

docker ps -a

查看所有容器,看是否有冲突的资源,包括容器名称如果指定的话也有可能冲突,如果有
则使用下面的命令删除容器

# 一定要先停止容器才能删除容器
docker stop ${container_name}
docker rm ${container_name}

很多新手在使用时,因为不知道基础概念,造成容器重复启动
其实第一次在使用docker run 启动容器之后,后续如果容器停止,想要再次运行,
只需要使用命令

docker start ${container_name}

就可以再次运行容器,无需docker run 创造重复的容器

9. 最常用的命令

以下所有命令的container_name可使用container_id代替,不知道的可以敲"docker ps -a" 查看,第一列就是。
查看最新十条容器日志

docker logs -f --tail=10 ${container-name}

运行指定镜像,附带常用参数

docker run --restart=always -m 512m -e JAVA_OPTS='-Xmx512m' --name ${container_name} -v ${host_path}:${container_path} -p ${host_port}:${container_port} -d ${images_name}
-d 以后台模式运行
--name ${container_name} 指定容器名称
----------------------------------------------------
将宿主机指定目录挂载到容器指定目录
-v ${host_path}:${container_path}
----------------------------------------------------
将宿主机端口映射到容器端口
-p ${host_port}:${container_port}
----------------------------------------------------
始终重新启动
 --restart=always

进入指定运行中的容器,使用指定的方式运行

docker exec -it ${container_name} /bin/bash
-it以命令交互方式运行

删除镜像

docker rmi ${img_name}

删除容器

docker rm ${container_name}

停止容器

docker stop ${container_name}

启动容器

docker start ${container_name}

查看容器

docker ps
参数 -a 查看所有容器

查看容器运行状态

查看所有
docker status
查看指定容器
docker status ${container_name}