Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包应用及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上。使用Docker可以更方便地打包、测试以及部署应用程序。
Docker环境安装
-
CentOS 6.8 安装Docker
- Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EPEL包。
yum install -y epel-release;
- 安装Docker
yum install -y docker-io
- 安装后的配置文件地址:/etc/sysconfig/docker
- 启动Docker后台服务:
service docker
- 查看docker版本
docker version
-
CentOS 7 安装Docker
- 确保自己使用的CentOS版本是7及以上,查看当前CentOS 系统版本:
cat /etc/redhat-release
- 卸载旧版本
yum -y remove docker docker-common docker-selinux docker-engine
- 安装
yum-utils
;
yum install -y yum-utils device-mapper-persistent-data lvm2
- 为yum源添加docker镜像仓库位置;
yum-config-manager --add-repo http://mirror.aliyun.com/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装docker ce;
yum -y install docker-ce
- 启动docker服务。
systemctl start docker
- 测试
docker version #查看Docker版本 docker run hello-world #运行hello-world容器
- 配置镜像加速 ,登录阿里云根据提示步骤:
- 卸载
systemctl stop docker yum -y remove docker-ce rm-rf /var/lib/docker
Docker帮助命令
docker version #容器版本
docker info #容器信息
docker --help #显示帮助
Docker镜像常用命令
搜索镜像
docker search [OPTIONS]
OPTIONS(镜像名字)说明 :
--no-trunc:显示完整的镜像描述;
-s:列出收藏数不小于指定值得对象。
--automated:只列出automated build类型的镜像
查看镜像版本
由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。
- 进入
Docker Hub
的官网,地址:https://hub.docker.com - 然后搜索需要的镜像:
- 查看镜像支持的版本:
下载镜像
docker pull [OPTIONS]:[TAG](版本)
列出镜像
docker images #列出本地主机上的镜像
OPTIONS说明:
-a:列出本地所有的镜像(含中间映像层)
-q:只显示镜像ID。
-digests:显示镜像的摘要嘻嘻
--no-trunc:显示完整的镜像信息
删除镜像
docker rmi 镜像ID #指定名称删除镜像
docker rmi -f 镜像ID #指定名称强制删除
docker rmi -f 镜像名1:TAG 镜像名2:TAG #强制删除多个
docker rmi -f $(docker images -qa) #强制删除全部
docker rmi `docker images | grep none | awk '{print $3}'` #删除所有没有引用的对象
构建镜像
-
通过DockerFile创建,通过以下命令构建
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile文件 docker build -t mall/mall-admin:1.0-SNAPSHOT .
-
从容器创建一个新的镜像
docker commit [OPTIONS] 容器ID [REPOSITORY][:TAG]
推送镜像
# 通过阿里云创建仓库镜像
docker login --username=[REGISTRY] #在阿里云可取,Registry实例
# 给本地镜像打标签为远程仓库名称
docker tag [IMAGEID] [REGISTRY]/[命名空间]/[仓库名称]:[镜像版本号]
# 推送到远程仓库
docker push [REGISTRY]/[命名空间]/[仓库名称]:[镜像版本号]
Docker容器常用命令
新建并启动容器
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0Copy to clipboardErrorCopied
- p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
- -name:指定容器名称,之后可以通过容器名称来操作容器;
- e:设置容器的环境变量,这里设置的是时区;
- v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
- d:表示容器以后台方式运行。
启动交互式容器
#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
列出容器
- 列出运行中的容器:
docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
在这里插入图片描述
停止容器
注意:$ContainerName
表示容器名称,$ContainerId
表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID,比如下面的停止容器命令。
docker stop $ContainerName(or $ContainerId)
例如:
docker stop nginx
#或者
docker stop c5f5d5125587
强制停止容器
docker kill $ContainerName
启动容器
docker start $ContainerName
启动守护式容器
docker run -d $ContainerName
进入容器
- 查看容器内部细节:
docker inspect $ContainerID
- 查看容器内运行的进程:
docker top $ContainerID
- 进入正在运行的容器并以命令行交互:
1、docker exec -it $ContainerID /bin/bash
2、重新进入docker attach $ContainerID
两种方式区别:
attach 直接进入容器启动命令的总段,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
- 从容器内拷贝文件到主机上
docker cp $ContainerID:[容器内路径] [主机目录]
删除容器
- 删除指定容器:
docker rm $ContainerID
- 按名称通配符删除容器,比如删除以名称
mall-
开头的容器:
docker rm `docker ps -a | grep mall-* | awk '{print $1}'`
- 强制删除所有容器;
docker rm -f $(docker ps -a -q)
查看容器的日志
- 查看容器产生的全部日志:
docker logs $ContainerID
- 动态查看容器产生的日志:
docker logs -f -t --tail $ContainerID
- -t 是加入时间戳
- -f 跟随最新的日志打印
-
- -tail 数字 显示最后多少条
查看容器的IP地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName
修改容器的启动方式
# 将容器启动方式改为always
docker container update --restart=always $ContainerName
同步宿主机时间到容器
docker cp /etc/localtime $ContainerName:/etc/
指定容器时区
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-d nginx:1.17.0
查看容器资源占用状况
- 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:
docker stats $ContainerName
- 查看所有容器资源占用情况:
docker stats -a
查看容器磁盘使用情况
docker system df
指定账号进入容器内部
# 使用root账号进入容器内部
docker exec -it --user root $ContainerName /bin/bash
查看所有网络
docker network ls
[root@local-linux ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
59b309a5c12f bridge bridge local
ef34fe69992b host host local
a65be030c632 none
创建外部网络
docker network create -d bridge my-bridge-network
指定容器网络
docker run -p 80:80 --name nginx \
--network my-bridge-network \
-d nginx:1.17.0
修改镜像的存放位置
- 查看Docker镜像的存放位置:
docker info | grep "Docker Root Dir"
- 关闭Docker服务:
systemctl stop docker
- 先将原镜像目录移动到目标目录:
mv /var/lib/docker /mydata/docker
- 建立软连接:
ln -s /mydata/docker /var/lib/docker
Docker容器清理
- 查看Docker占用的磁盘空间情况:
docker system df
- 删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
- 删除所有
dangling
镜像(没有Tag的镜像):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
- 删除所有
dangling
数据卷(即无用的 volume):
docker volume rm $(docker volume ls -qf dangling=true)