Docker+CentOS7
注意事项
CentOS7使用docker
注意:docker要求centos内核版本高于3.10
uname -r // 可以查看linux系统内核版本
如果是非root用户,使用 sudo 运行
- 如果安装过docker,则使用命令删除
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Docker的安装
安装依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
如果要使用yum 查看仓库中所有docker版本
设置yum源,更新yum 的包索引
设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新包索引
yum makecache fast
可以查看仓库所有docker版本
yum list docker-ce --showduplicates | sort -r
安装docker
安装最新版
yum -y install docker-ce docker-ce-cli containerd.io
安装指定版本
yum -y install docker-ce-18.03.1.ce
安装命令提示插件(table键自动补全)
yum -y install bash-completion
我这里选择 安装了 指定版本,18.03.1.ce
启动docker
systemctl start docker 或者 service docker start/status/stop
设置为开机启动
systemctl enable docker
查看docker版本
docker version
docker info # docker 更详细的信息
卸载docker
yum -y remove docker-engine 卸载docker引擎
rm -rf /var/lib/docker 删除资源
Docker常用命令
如果忘记了某些命令,可以查看 命令文档
docker --help 或更具体
docker volume --help
镜像
- docker search name
docker search tomcat // 搜索tomcat在Docker Hub中的镜像
- docker pull image
docker pull tomcat:7 // 从仓库下载镜像,:7 是指定版本号
- docker images
docker images // 列出本地镜像
docker images -qa // 列出本地镜像的id
- docker rmi image[:tag]
docker rmi tomcat:7 // 删除本地镜像
docker rmi $(docker images -qa) // 删除所有本地镜像
容器
- docker run
docker run -d -p 80:8080 tomcat:7
新建并运行一个容器,其中 -d :后台运行
-p :宿主机端口--容器端口,可以做到宿主机和容器端口的映射
docker run -d -p 80:8080 --restart=always tomcat:7
--restart=always 开机自动启动
- docker update 容器
# 修改容器的某些属性
# 比如我的docker容器在run的时候并没有设置 Docker 启动时,重启,可以使用 docker update 设置
docker update --restart=always 容器id
比如修改了一个容器的 --restart=always
那么可以在 /var/lib/docker/containers/容器目录/hostconfig.json文件中查看
默认情况下{“Name”:“no”},修改完之后就是上图的 always
- docker ps
docker ps // 列出所有在运行的容器
docker ps -a // 列出所有容器
- docker stop
docker stop 容器id // 停止容器
- docker start
docker start 容器id // 运行一个停止的容器
- docker container logs 容器id == docker logs 容器id
docker container logs 容器id // 查看指定容器的日志信息
docker logs -f 容器id // 动态查看日志
- docker exec
docker exec -it 容器id /bin/bash // 进入容器内部
-i保证我们的输入有效,即使在没有detach的情况下也能运行.
-t表示将分配给我们一个伪终端.我们将在伪终端输入我们的内容.
exit : 退出容器
- docker rm
docker rm 容器id // 删除已停止的容器
docker rm -f 容器id // 强制删除,包括在运行的容器
docker rm $(docker ps -a -q) // 删除所有的容器
使用docker 安装运行tomcat
先从仓库拉下来一个tomcat:8镜像
docker pull tomcat:8
拉下来之后:
docker images // 查看一下本地的镜像
docker run -d -p 8000:8080 645 // 新建并启动容器
-p:把主机的8000端口和docker容器的8080端口映射
645:镜像的id,不用完整,会自动识别
-d:后台启动
查看容器:
docker ps -a // 查看所有容器,可以看到容器已经启动了,并且做了端口映射
注意:假如虚拟机的ip是192.168.23.130
这时候访问 http://192.168.23.130:8000如果是404
那么说明docker容器里的tomcat的webapps目录可能是空的
解决:
法一:可以把webapps删了,webapps.dist改名为 webapps
rm -rf webapps
mv webapps.dist webapps
法二:把webapps.dist里的文件,拷贝到webapps下
cp -r webapps.dist/* webapps
再次访问即可
Docker启动常见问题
-
第一种就是容器端口被占用了
# 查看被占用的端口 以3306为例 netstat -nltp |grep 3306 # 杀掉进程 (这里需要注意的是,docker启动的都是守护进程,如果用 kill -9 很可能杀不掉进程) kill 端口占用的PID
Docker 提交镜像(基于容器)
场景:
例如 tomcat 的启动,每次我们从远程仓库拉下来后,可能都要去把webapps.dist的文件拷贝到webapps下,非常麻烦
实践:
前提:我们启动tomcat容器后,把webapps.dist的文件拷贝到了webapps中(或者上述法一)
我们可以把这个已经启动的容器commit成一个镜像,下次再启动一个新的tomcat容器时,就可以直接启动这个镜像,后面就什么都不用做了
docker commit -m=信息 -a=作者 容器id new_image[:tag]
实际上:我们把webapps.dist的文件拷贝到webapps中时,在容器里做的操作,全都是在 原镜像的基础上,编写的新的 镜像命令(类似于Dockerfile文件),一层层叠加,最后打包成新的镜像
Dockerfile
Dockerfile的基础命令
指令必须 大写
指令从上到下、依次执行
# 是注释
每一个指令都是一层
DockerFile:构建文件,定义了一切步骤
DockerImages:通过DockerFile构建生成的镜像
# 查看镜像的历史(可以看到镜像的构建过程)
docker history 镜像id
Dockerfile的构建
首先Dockerfile的命名规则:
如果命名为Dockerfile,那么构建的时候就不用去-f指定文件位置,否则需要指定文件的位置
# 如果命名为 Dockerfile,直接指定 tag即可,注意注意注意最后有一个 . 的存在,在当前上下文构建
docker build -t mydocker:1.0 .
# 如果命名 不是Dockerfile,要注意指定文件路径(最好从 / 开始)
docker build -f /usr/local/docker/mydocker -t mydocker:1.0 .
Docker推送镜像到远程仓库
推送到Dockerhub
推送到远程仓库,首先一定要有个地址,然后登录上,再有个仓库(默认是登录到Dockerhub)
可以先到Dockerhub上创建一个仓库,比如我创建一个 mytom仓库(前面是我的账号)
登录dockerhub
docker login -u lu1056979087 # 回车后输入密码
登录成功后
需要先把我们要推送的镜像打一个tag,以下列mytom镜像为例
# 把mytom:1.0的镜像 打成 lu1056979087/mytom:1.0的tag
# 需要注意的是,lu1056979087是用户,而后面的 mytom是仓库名,要和dockerhub相同,后面的tag可以随便写
docker tag mytom:1.0 lu1056979087/mytom:1.0
打包完后,可以再看一下镜像,发现多了个镜像,但是其实镜像的id还是一样的
推送到dockerhub仓库
docker push lu1056979087/mytom:1.0 # 推送到远程仓库
推送完成后,dockerhub的仓库里会多一个tag的资源
推送到阿里云(只能免费创建3个命名空间)
先退出dockerhub的账号
docker logout
退出成功
先去整一个阿里云的镜像仓库服务,创建好命名空间和仓库
创建好后,可以到阿里云镜像的 基本信息里面看如何操作,有操作指南
根据操作指南即可傻瓜式推送
打tag
# 这里的tag和dockerhub不一样
# registry.cn-hangzhou.aliyuncs.com是你的阿里云镜像库的地址
# /wangluhao 是创建的命名空间,一个命名空间下可以有多个仓库
# /hello 是仓库名称
# 注意对应关系
推送