Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包至中,并发布和应用到Windows、Mac、Linux等任意平台上。Docker仅是打包、隔离硬件环境,是系统中的一个进程,而不是像虚拟机一样可以运行一个完整的操作系统。
镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。
容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境,以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。
仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。
## 卸载旧版本,防止出现冲突问题
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
## 安装yum-utils包(提供yum-config-manager 实用程序)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2;
## 添加 docker 源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
## 更新源缓存
sudo yum makecache fast;
## 列出可用docker,若未能列出说明docker源有问题
yum list docker-ce --showduplicates | sort -r
## 安装 Docker-CE
sudo yum -y install docker-ce;
## 启动 Docker
sudo systemctl start docker;
## 设置开机启动
sudo systemctl enable docker
## 验证安装
## 通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community
sudo docker run hello-world
1.0> Docker服务常用命令
## 查看Docker版本信息
docker version
## 查看docker简要信息
docker -v
## 启动Docker
systemctl start docker
## 关闭docker
systemctl stop docker
## 设置开机启动
systemctl enable docker
## 重启docker服务
service docker restart
## 关闭docker服务
service docker stop
2.0> Dockert镜像常用命令
## 列出本地所有镜像
docker images
## 从镜像仓库中拉取或者更新指定镜像
docker pull hello-world
## 删除镜像
docker rmi hello-world
3.0> Docker容器常用命令
## 从镜像新建一个容器,并在前台启动,启动后会立即终止
docker run [镜像名/镜像ID]
## 从镜像新建一个容器,并在后台持续运行
docker run --name [可为容器指定一个名称] -d [镜像名:tag] /bin/sh -c "while true;do echo hello docker;sleep 1;done"
## 列出本机运行的容器
docker ps
## 列出本机所有的容器(包括停止和运行)
docker ps -a
## 查看容器日志, 发生错误时可以使用此命令打出日志
docker logs nginx
## 启动容器
docker start [容器ID]
## 重启容器
docker restart [容器ID]
## 停止容器
docker stop [容器ID]
## 停止所有容器
docker stop $(docker ps -aq)
## 杀死容器进程
docker kill [容器ID]
## 删除单个容器
docker rm [容器ID]
## 删除所有容器
docker rm $(docker ps -aq)
## 查看容器日志
docker logs [容器ID]
## 从主机复制文件到容器
sudo docker cp host_path containerID:container_path
## 从容器复制文件到主机
sudo docker cp containerID:container_path host_path
## 进入docker容器
docker exec -it 容器ID或名称 /bin/bash
## 退出docker容器
exit
1.0> 镜像的导入/导出
如下列出本地所有镜像,其中包含了镜像的名称和tag(版本):
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python latest f48ea80eae5a 6 days ago 917MB
mysql latest b05128b000dd 6 days ago 516MB
hello-world latest d1165f221234 8 months ago 13.3kB
ohttps/ohttps-nginx latest 0374f3a6624e 17 months ago 640MB
镜像导出
## 将指定镜像保存成 tar 归档文件
## dockerdemo.tar导出后的归档文件,dockerdemo:tag2是镜像名称和tag号
docker save -o dockerdemo.tar dockerdemo:tag2
镜像导入
## 导入时无法对镜像进行重命令
## 若本地已存在同名镜像库,则已存在镜像将会被覆盖
docker load -i dockerdemo.tar
2.0> 容器快照的导入/导出
容器快照导出
## dockerdemo.tar是导出后的文件,a404c6c174a2是容器的ID
docker export -o dockerdemo.tar a404c6c174a2
容器快照导入
## dockerdemo.tar要导入的容器文件
## dockerdemo:imp表示导入后的镜像名称,其中imp是给导入的镜像打的tag
docker import dockerdemo.tar dockerdemo:imp
docker load
是导入镜像文件到本地镜像库;
docker import
是导入一个容器快照到本地镜像库。
两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。从容器快照文件导入时可以重新指定标签等元数据信息。
3.0> 将容器打包成镜像
将容器打包成镜像
## 注:镜像名必须要全部小写,否则将不能打包
docker commit 容器ID 镜像名称:tag
镜像导入
## 导入时无法对镜像进行重命令
## 若本地已存在同名镜像库,则已存在镜像将会被覆盖
docker load -i dockerdemo.tar
1.0> 使用镜像nginx:latest,以后台模式启动一个容器, 并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
2.0> 使用镜像 nginx:latest,以后台模式启动一个容器, 并将容器的 80 端口映射到主机的 80 端口, 主机的目录 /data 映射到容器的 /data。
## 宿主机端口:容器端口
docker run -p 80:80 -v /data:/data -d nginx:latest
3.0> 绑定容器的 8080 端口,并将其映射到宿主机 127.0.0.1 的 80 端口上。
## 指定tcp协议
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
## 或
## 指定udp协议
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
4.0> 查看容器绑定和映射的端口及Ip地址
docker port 44de1b0b5312(容器ID)
其它详见:https://blog.csdn.net/ithaibiantingsong/article/details/81386307
Docker网络信息
docker容器有五种网络模式:
1)bridge模式(默认),--net=bridge
容器有独立的网络命名空间,容器有独立的网卡等所有单独的网络栈;安装完docker,系统会自动添加一个供docker使用的网桥docker0,当创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。
2)host模式,--net=host
此模式下,容器没有自己独立的网络环境,容器直接使用宿主机的ip和端口。
3)none模式,--net=none
容器有自己独立的网络命名空间,但没有任何网络配置,需要用户自行为容器添加网卡、IP等。
4)....其它不常用
## 列出现有docker容器所使用的网络模式
docker network ls
## 查看指定docker容器所使用的网络模式
docker inspect 容器名称/容器ID | grep -i "network"
## 查看容器IP及网关配置
## docker inspect命令用于获取容器或镜像的元数据,元数据中包含了容器或镜像的所有配置,其中就包括容器IP、网关等;
docker inspect 容器名称/容器ID
## 将主机的目录 /data 映射到容器的 /data。
docker run -v /data:/data -d nginx:latest
## 查看docker容器挂载的目录
docker inspect 容器名称或ID | grep Mounts -A 20