Docker 是一个开源的应用容器引擎,使用 Docker 可以将我们的应用程序和其依赖环境打包到一起进行移植、发布,我们就不需要在一台新的机器上为应用程序去安装、配置所需的依赖包、环境变量等。
1. Docker 组件
在 Docker 主要有以下几部分组成:
- Docker 客户端,负责与 Docker 守护进行通信;
- Docker 守护进程,负责管理 Docker 镜像和 Docker 容器;
- Docker 镜像,负责产生 Docker 容器实例;
- Docker 容器,包含了应用程序和其所依赖环境;
- Docker Hub,已经制作好了很多镜像
链接:https://hub.docker.com/
2. Docker 安装
# 安装 yum-utils sudo yum install -y yum-utils # 配置镜像源, 我们使用的是阿里云的源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast # 安装 Docker yum install docker-ce docker-ce-cli containerd.io
安装命令执行成功之后,使用下面命令来管理Docker 守护进程:
# 查看 docker 版本 docker version # 启动 docker 服务 systemctl start docker # 关闭 docker 服务 systemctl stop docker # 重启 docker 服务 systemctl restart docker # 查看 docker 状态 systemctl status docker # 设置开机启动 systemctl enable docker
3. Docker 使用
我们通过一个小实验来快速入门 Docker 的使用方法。大致的步骤如下:
0. 查看 Docker 服务运行状态;
1. 查看本地镜像;
2. 从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu:18.04 镜像;
3. 再次查看本地镜像;
4. 使用 ubuntu:18.04 镜像构建容器,并交互式运行容器;
5. 在容器内部执行 LS 命令;
6. 退出容器;
7. 查看本地容器实例;
8. 再次启动停止的容器;
9. 退出并停止容器.
# 0. 查看 Docker 服务运行状态; systemctl status docker # 1. 查看本地镜像; docker images """ REPOSITORY TAG IMAGE ID CREATED SIZE """ # 2. 从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu 镜像; docker search ubuntu docker search ubuntu --no-trunc docker pull ubuntu """ Using default tag: latest latest: Pulling from library/ubuntu 405f018f9d1d: Pull complete Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest """ # 3. 再次查看本地镜像; docker images docker image ls """ REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 27941809078c 9 days ago 77.8MB """ # 4. 使用 ubuntu 镜像构建容器,并交互式运行容器,并在容器中执行 LS 命令; docker run -it ubuntu:latest /bin/bash """ root@abcced6d5ee8:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var """ # 5. 退出容器; exit """ exit [root@bogon docker]# """ # 6. 查看本地容器实例; docker ps docker ps -a """ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abcced6d5ee8 ubuntu:latest "/bin/bash" About a minute ago Exited (0) 35 seconds ago sad_montalcini """ # 7. 再次启动停止的容器; docker start 容器ID """ [root@bogon docker]# docker start abcced6d5ee8 abcced6d5ee8 """ # 8. 再次进入容器 docker exec -it abcced6d5ee8 /bin/bash """ root@abcced6d5ee8:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var """ # 9. 退出容器, 并停止容器 exit docker stop 容器ID """ [root@bogon docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abcced6d5ee8 ubuntu:latest "/bin/bash" 9 minutes ago Up 6 minutes sad_montalcini [root@bogon docker]# docker stop abcced6d5ee8 abcced6d5ee8 [root@bogon docker]# docker exec -it abcced6d5ee8 /bin/bash Error response from daemon: Container abcced6d5ee8e6980f8271d3e78d18d0dff708e377c22c7798006a133ac73559 is not running """
4. Docker 镜像
镜像操作主要包括:
1. 查看镜像
2. 搜索镜像
3. 下载镜像
4. 运行镜像
5. 删除镜像
6. 保存镜像
7. 加载镜像
# 1. 查看镜像 docker images # 查看所有镜像 docker images -q # 只查看镜像的ID docker images --no-trunc # 显示镜像完整信息 # 2. 搜索镜像 docker search 镜像名 # 3. 下载镜像 docker pull 镜像名:版本 # 不指定 TAG, 则默认使用 latest # 4. 运行镜像 docker run -it 镜像名:版本 程序 # 交互式运行容器 docker run -it --name=标签名 镜像名:版本 程序 # 容器指定名字 docker run -itd 镜像名:版本 程序 # 后台运行容器 # 5. 删除镜像 docker rmi -f 镜像名 # 删除指定镜像 docker rmi -f 镜像ID # 删除指定镜像 docker rmi -f $(docker images -qa) # 删除所有镜像 # 6. 保存镜像 docker save 镜像名:版本 -o xxx.tar """ [root@bogon ~]# docker save alpine:latest -o myalpine.tar [root@bogon ~]# ls anaconda-ks.cfg myalpine.tar """ # 7. 加载镜像 docker load -i xxx.tar """ [root@bogon ~]# docker load -i myalpine.tar 24302eb7d908: Loading layer [==================================================>] 5.811MB/5.811MB REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest e66264b98777 3 weeks ago 5.53MB centos latest 5d0da3dc9764 9 months ago 231MB """
5. Docker 容器
容器操作主要包括:
1. 查看容器
2. 启动容器
3. 停止容器
4. 删除容器
5. 进入容器
6. 容器导出
7. 容器导入
Docker 容器创建时指定的命令会和容器实例绑定,再次启动容器时将会默认执行绑定的命令。
# 1. 查看容器 docker ps # 查看正在运行的容器实例 docker ps -a # 查看正在运行或者已停止的容器实例 dr # 2. 运行容器 docker start 容器ID # 启动容器 docker restart 容器ID # 重启容器 # 3. 停止容器 docker stop 容器ID # 4. 删除容器 docker rm -f 容器ID # 删除指定容器 docker rm -f $(docker ps -qa) # 删除所有容器 # 5. 进入容器 # attach 退出终端会导致容器停止 # exec 不会导致容器停止 docker attach -it 容器ID /bin/bash docker exec -it 容器ID /bin/bash # 6. 容器导出 docker export 容器ID > xxx.tar # 7. 容器导入 docker import xxx.tar xxx:tag