一.CentOS安装Docker
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
安装docker
安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
注意:
此处使用yum命令如果报错,需要修改一下yum源
sudo cat <<EOF > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-\$releasever - Base - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-\$releasever - Updates - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/\$releasever/updates/\$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-\$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[centosplus]
name=CentOS-\$releasever - Plus - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/\$releasever/centosplus/\$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
然后输入命令:
yum install -y docker-ce
启动docker
# 先关闭防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl status docker # 检查docker状态
systemctl enable docker # 设置docker服务开机自启
输入命令查看docker 版本
docker -v
二.CentOS7安装DockerCompose
配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://bpeyquta.mirror.aliyuncs.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
下载
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改文件权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
# 查看系统中是否已经包含命令补齐脚本
ls /usr/share/bash-completion/completions/docker*
# 下载自动补齐工具
yum -y install bash-completion
# 让自动补齐功能生效
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
三.docker容器命令
docker run --name 容器名称 -v 宿主机目录:容器目录
-p 宿主机端口:容器端口 -d 镜像名称
-d 容器后台运行
-it 交互式运行
-v 挂载数据卷
--
restart=always
设置容器的重启策略为始终重启。这意味着即使容器因为某些原因停止,Docker 也会自动重新启动它
# 拉取镜像
docker pull nginx:1.19.0
# 启动容器
docker run --name nginx -d -p 80:80 nginx:1.19.0
如图所示,nginx启动成功。
docker pause:让一个运行的容器暂停
docker unpause:让一个容器从暂停状态恢复运行
停止容器:docker stop 容器名称或容器id
启动容器:docker start 容器名称或容器id
删除容器:docker rm 容器名称或容器id (可以删除多个容器,以空格隔开)
查看日志命令:docker logs -f 容器名称或容器id
-f 使得日志持续输出
查看正在运行的容器:docker ps
查看所有容器: docker ps -a
进入容器: docker exec -it 容器名称或容器ID bash
四.docker镜像操作命令
# 拉取镜像,不加版本号默认拉取latest
docker pull 镜像名称:版本号
# 查看镜像
docker images
# 保存镜像
docker save -o [保存的目标文件名称] [镜像名称]
# 删除本地镜像
docker rmi nginx:latest
# 加载本地文件
docker load -i nginx.tar
注意:当关闭服务器后,再次打开,直接运行docker命令,可能会报如下信息:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# 首先可以通过status命令查看docker状态 sudo service docker status # 如果服务状态为dead,可以通过如下命令启动 sudo service docker start
五.数据卷操作
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume (注意:如果要删除,需要先删除使用的容器)
#创建数据卷,名称testVolume
docker volume create testVolume
#查看数据卷信息
docker volume inspect testVolume
#将已有的数据卷进行挂载
docker run -d --name nginx -v testVolume:/usr/local -p 80:80 nginx:1.19.0
#如果没有已有的数据卷,想指定宿主机目录与容器内目录挂载
docker run -d --name nginx -v 宿主机目录:容器内目录 -p 80:80 nginx:1.19.0
六.Dockerfile自定义镜像
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
Dockerfile语法
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Lay
示例:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
将该文件上传到虚拟机任意目录执行:docker build -t javaweb:1.0
七.搭建私有镜像仓库
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
docker pull registry
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
上述已经装完.命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像.
推送、拉取镜像
① 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.200.130:8080/
docker tag 本地镜像名称:镜像版本 仓库IP:端口/本地镜像名称:镜像版本
docker tag nginx:latest 192.168.200.130:8080/nginx:1.0
② 推送镜像
docker push 仓库IP:端口/本地镜像名称:镜像版本
docker push 192.168.200.130:8080/nginx:1.0
注意:此处上传可能报错
The push refers to repository [192.168.187.129:5000/nginx]
Get "https://192.168.187.129:5000/v2/": http: server gave HTTP response to HTTPS client,这是由于 Docker 客户端尝试通过 HTTPS 连接到位于192.168.187.129:5000
的 Docker 注册表,但服务器以 HTTP 响应。此时可以编辑 Docker 守护进程的配置文件(通常位于
/etc/docker/daemon.json
){ "insecure-registries" : ["192.168.187.129:5000"] }
保存文件后,重启 Docker 服务以使更改生效:
sudo systemctl restart docker
③ 拉取镜像
docker pull 仓库IP:端口/本地镜像名称:镜像版本
docker pull 192.168.200.130:8080/nginx:1.0