我们写的代码经历三个环境:开发环境,测试环境,生产环境;三个环境使用的人不同,为了确保开发,测试,生产一致,我们引入了Docker
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

镜像和容器的关系:

1. 当我们利用docker安装应用时,docker会自动搜索并下载应用的镜像(image).镜像不仅包含应用本身,还包含应用运行所需要的环境,配置,系统函数库.Docker会在运行镜像时创建一个隔离环境,称为容器(container)
2. 镜像类似于一个模具,容器就是制作出来的糕点
  • 镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub
    客户端Client执行docker run命令,Docker Server的docker daemon守护进程监听到之后,就去镜像仓库拉取镜像images,运行的时候创建一个隔离的环境container

常用命令

一图理解docker常用命令一图理解docker常用基础命令


# 从镜像仓库拉取镜像到本地
docker pull

# 查看所有本地镜像
docker images

# 删除镜像(remove image)
docker rmi

# 自定义镜像(打包)
docker build

# 拉取别人的镜像
# 方法1 将打包的镜像保存到本地,变成一个压缩文件
docker save

# -o是起名字 将最新版本的nginx镜像压缩成名为nginx的压缩包
docker save -o nginx.tar nginx:latest


# 将压缩文件加载到镜像中
docker load

#方法2 推到镜像仓库
docker push

# 创建并运行容器,一条龙服务,此时容器处于运行中状态
docker run

# 停止容器-->就是停止容器中某个进程
docker stop

# 重新启动容器-->将容器内部停掉的进程重新启动
docker start

# 查看当前容器的运行状态(process status)
docker ps

# 查看所有的容器(包括运行完被停掉的)
docker ps -a 

# 删除容器
docker rm

# 查看容器日志
docker logs

# -f持续输入
docker -f logs nginx

# 进入到某个容器内部(execute)
docker exec

# -it添加一个可输入的终端,在里面可以使用ls命令
docker exec -it nginx bash

docker rundocker start:

  1. docker run 每次都会启动并创建一个容器
  2. docker start 是重新打开的停掉的容器
    如果有不明白参数的命令,可以通过 --help来查看

给常用docker命令起别名,方便我们访问:

# 进入vim编辑器
vi ~/.bashrc

#内容如下
alias rm='rm-i'
alias cp='cp-i'
alias mv='mv-i'
alias dis='docker images'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'

然后,执行命令重新启动使别名生效

source ~/.bashrc
  • docker run 创建并运行一个mysql容器
docker run #创建并运行一个容器
docker run -d \  #让容器在后台运行,前台可以干其他的东西
	--name mysql \  # 给容器起名字,必须唯一
	-p 3306:3306 \  #设置端口映射;宿主机端口:容器内端口
	-e TZ=Asia/Shanghai \  #设置环境变量
	-e MYSQL_R00T_PASSWORD=123 \
	mysql #指定运行的镜像的名字

镜像名称一般分为两部分:[repository]:[tag],其中,repository是镜像名,tag是镜像版本,比如mysql:5.7
如果没有指定tag,默认是latest,代表最新版本的镜像

数据卷(volume) 是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
虚拟目录和宿主机文件系统的关系

想去修改Nginx容器中的conf文件,可以直接在宿主机中利用vim等编辑器修改,间接关联到docker中conf

# 创建数据卷
docker volume create

# 查看所有数据卷
docker volume ls

# 删除制定数据卷
docker volume rm

# 查看某个数据卷的详情-->可用于查看数据卷在宿主机的位置
docker volume inspect

# 清除数据卷
docker volume prune


创建容器并挂在数据卷(数据卷挂载只能在创建容器的时候进行)

数据卷挂载只能在创建容器的时候进行
当创建容器时,如果数据卷不存在,会自动创建数据卷(没有指定名字,称为匿名卷);
也可以自己手动创建数据卷(docker volume create),然后在创建容器的时候使用这个已经存在的数据卷

# 创建容器并挂在数据卷
docker run -v 数据卷:容器内目录

更多推荐