docker [系统环境:CentOS7]
一、 安装docker
安装docker
首先更新yum的软件包索引: yum makecache fast
yum安装gcc相关环境: ① yum -y install gcc ② yum -y install gcc-c++
然后进入以下操作
1、卸载旧的docker版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装需要的包
yum install -y yum-utils
3、设置镜像的仓库
yum-config-manager \
--add-repo \
[镜像地址]
//https://download.docker.com/linux/centos/docker-ce.repo //国外地址
//http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //阿里云镜像地址 (推荐)
4、安装docker docker-ce :社区版 docker-ee :企业版
yum install docker-ce docker-ce-cli containerd.io
5、启动docker
systemctl start docker
6、查看是否安装成功
docker version
7、hello world (官方镜像测试)
docker run hello-world
8、查看docker下载到本地的镜像
docker images
卸载docker(了解)
- yum remove docker-ce docker-ce-cli containerd.io //卸载docker
- rm -rf /var/lib/docker //只卸载docker本地的镜像文件不会移除,此命令删除本地所有images、 /var/lib/docker:是docker的默认工作路径
配置使用阿里云镜像服务(记得要root权限)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://x24bnhrm.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
**二、命令小全
1、系统中的命令
- 启动docker:systemctl start docker
- 查看docker运行状态:systemctl status docker
- 停止docker服务:systemctl stop docker
- 重启docker:systemctl restart docker
- 开机自启动docker:systemctl enable docker
2、docker中的命令
2.1、镜像相关
- 查看docker本身的概要信息(需要先启动docker):docker info
- 查看本地镜像:docker images
- 搜索远程镜像:docker search 镜像名称
- 拉取镜像(默认拉取最新版本,也可加冒号去指定版本):docker pull 镜像名称
- 删除镜像(前提是对应镜像没有容器或停止容器):docker rmi 镜像id或名称
- 删除所有镜像(前提是所有镜像都不可以有启动着的容器):docker rmi
docker images -q
2.2、容器相关
-
查看正在运行的容器:docker ps (常用)
-
查看所有容器:docker ps -a
-
查看最后一次运行的容器:docker ps -1
-
查看停止的容器:docker ps -f status=exited
-
创建容器:docker run
·)-i:表示运行容器
·)-t:表示容器启动后会进入其命令行
·)--name:为创建的容器命名
·)-v:表示目录映射关系
·)-p:表示端口映射,前者是宿主机端口,后者是容器内端口,可以有多个-p做多端口映射
·)-d:表示会创建一个守护式容器在后台运行,也就是后台运行,不进入对应命令行。(与 -t 相反)
-
交互式方式创建容器(创建并前台运行):docker run -it --name=自定义容器名称 镜像名称:标签 /bin/bash
- (一旦退出前台,且容器中没有运行中的进程,对应容器也就停止运行)
-
守护式方式创建容器(创建后台运行):docker run -di --name=自定义容器名称 镜像名称:标签
- (这种方式容器中没有运行中的进程也会默认停止容器)
-
进入容器:docker exec -it 容器名称 /bin/bash
-
停止容器:docker stop 容器名称或id
-
启动容器:docker start 容器名称或id
-
文件拷贝:·)将文件拷贝到容器内:docker cp 需要拷贝的文件或目录 容器名称:容器目录
·)将文件从容器内拷贝出去:docker cp 容器名称:容器目录 需要拷贝的文件或目录
-
目录挂载:docker run -di --name=自定义名称 -v 宿主机目录:容器目录 镜像名称:标签
-
查看容器ip:·)查看容器运行的各种数据:docker inspect 容器名称或id
·)只查看容器ip(也就是筛选出自己想要的数据):docker inspect --format='{.NetworkSettings.IPAddress}' 容器名称或id
-
删除容器(必须先停止容器):docker rm 容器名称或id
3、docker开发环境搭建
- 创建并启动mysql容器并进行端口映射mysql,远程连接:docker run -di --name=docker_mysql -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=自定义远程连接密码 centos/mysql-57-centos7(镜像名称)
- 创建并启动tomcat容器,并进行端口以及文件夹映射:docker run -di --name=docker_tomcat -p 8008:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:latest
- (前面是宿主机的文件夹地址,冒号
:
后面是docker容器中的文件夹地址(端口同样如此:前宿主后容器))
- (前面是宿主机的文件夹地址,冒号
- 创建并启动容器,并进行端口映射:docker run -di --name=docker_nginx -p 80:80 镜像名称
4、docker的备份与迁移
- 将容器保存为镜像①:docker commit 要备份的容器名 备份后的镜像名
- 将镜像保存为tar文件②:docker save -o 打包成的文件名 备份后的镜像名
- 镜像的恢复与迁移③:docker load -i tar文件
5、Dockerfile脚本构建
Dockerfile:根据基础镜像(操作系统,或者Dockerfile构建出来的新镜像),创建新的镜像(开发环境,项目等)。
使用Dockerfile脚本创建镜像的好处:
·)对于开发人员:可以为开发人员提供一个完全一致的开发环境,避免环境冲突。
·)对于测试人员:可以直接拿开发时构建的镜像或者通过原来的Dockerfile文件构建新的镜像开始工作。
·)对于运维人员:部署时,可以实现应用的无缝移植。
注意:可以使用vim直接创建Dockerfile,文件名称固定
- FROM image_name:tag:使用哪个基础镜像启动构建流程 //使用前本地存在,不存在则自动下载
- MAINTAINER 自定义username:声明镜像的创建者
- ENV key value:配置环境变量,可以写多条。
- RUN command:执行某个linux命令,Dockerfile中常用于创建目录,它Dockerfile核心部分,也可以写多条。
- ADD source_dir/file dest_dir/file:将宿主机的文件复制到容器内,如果只压缩文件,将会在执行时自动解压。
- COPY source_dir/file dest_dir/file:和ADD差不多,只是说有压缩文件时不会自动解压。
- WORKDIR path_dir:设置工作目录。(基于哪个目录去工作)。
栗子:以构建jdk1.8镜像为例:首先所在文件夹中存在jdk1.8的压缩包,然后使用vim在Dockerfile中编辑以下内容,以下除RUN命令下以外,其他所有文件和文件夹必须已经存在,。
FROM centos:latest
MAINTAINER myzyt
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
最后执行该脚本:docker build -t='jdk1.8' . //其中'jdk1.8'表示新镜像名称, . 表示当前目录,用于指定Dockerfile文件所在文件夹。
6、docker私有仓库(registry)的配置(上传到远程仓库需要先注册dockerhub账号 hub.docker.com/signup)
-
登录:docker login -u username
直接回车下边会让输入密码,类似于MySQL服务的命令行登录
-
拉取镜像:docker pull registry
-
创建私有仓库容器:docker run -di --name=registry -p 5000:5000 registry
-
编辑daemon.json文件,使docker信任私有仓库地址:vi /etc/docker/daemon.json
·)json中添加内容:"insecure-registries":["ip:5000"]
-
重启docker服务:systemctl restart docker
-
将镜像上传到私有仓库:
·)第一步:打标签,为上传做准备:docker tag jdk1.8 ip:5000/jdk1.8
·)第二步:启动docker私服:docker start registry
·)第三步:上传镜像:docker push ip:5000/jdk1.8