CentOS7安装Docker-2024
安装
- 更新yum仓库:
yum -y update
- 安装
yum-utils
并配置阿里云的docker仓库和相关插件:
sudo yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
- 下载最新版本的docker:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y----或下载指定版本(跟版本号即可,通过命令yum list docker-ce --showduplicates | sort -r可查看当前所有的版本)
yum install docker-ce-20.10.6 -y
- 设置开机启动:
systemctl start docker && systemctl enable docker
- 查看版本:
docker version
- 配置阿里云加速器:
1.进入https://cr.console.aliyun.com/
2.在镜像工具--镜像加速器中找到当前操作系统,根据文档复制所有命令到系统中运行
- 重启docker:
systemctl daemon-reload
systemctl restart docker
- 卸载docker:
yum remove -y docker
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
- 如出现以下docker镜像拉取失败,可按如下方式修改:
修改/etc/docker/daemon.json
文件:
sudo tee /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.1ms.run","https://hub.rat.dev","https://docker.1panel.live"]
}
EOF
重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
- 常用命令
docker search 镜像名 --搜索镜像
docker pull 镜像名 --拉取镜像
docker images --列出镜像
docker rmi --删除镜像
容器相关命令
1、新建并启动容器
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将
列举一些常用的选项。
-d选项:表示后台运行
-P选项:随机端口映射
-p选项:指定端口映射,有以下四种格式。
– ip:hostPort:containerPort
– ip::containerPort
– hostPort:containerPort
– containerPort
–net选项:指定网络模式,该选项有以下可选参数:
–net=bridge:默认选项,表示连接到默认的网桥。
–net=host:容器使用宿主机的网络。
–net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
–net=none:不配置该容器的网络,用户可自定义网络配置。
docker run -d -p 91:80 nginx
这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
访问 http://Docker宿主机 IP:91/
,将会看到nginx的主界面如下:
需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在
该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。
2、列出容器
用 docker ps命令即可列出运行中的容器
docker ps
如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下
- CONTAINER_ID:表示容器 ID。
- IMAGE:表示镜像名称。
- COMMAND:表示启动容器时运行的命令。
- CREATED:表示容器的创建时间。
- STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
- PORTS:表示容器对外的端口号。
- NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–name选项
自行指定。
3、停止容器
使用 docker stop命令,即可停止容器
docker stop f0b1c8ab3633
其中f0b1c8ab3633是容器 ID,当然也可使用 docker stop容器名称来停止指定容器
4、强制停止容器
可使用 docker kill命令发送 SIGKILL信号来强制停止容器
docker kill f0b1c8ab3633
5、启动已停止的容器
使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start命令来启
动
docker run f0b1c8ab3633
6、查看容器所有信息
docker inspect f0b1c8ab3633
7、查看容器日志
docker container logs f0b1c8ab3633
8、查看容器里的进程
docker top f0b1c8ab3633
9、容器与宿主机相互复制文件
docker cp 容器id:要拷贝的文件在容器中的路径 宿主机相应的路径
如:docker cp f0b1c8ab3633:/etc/nginx/nginx.cong /mydata/nginx
10、进入容器
使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候, 没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了
docker exec -it f0b1c8ab3633 /bin/bash (有的容器需要把/bin/bash换成sh)
11、容器内安装vim、ping、ifconfig等指令
12、删除容器
使用 docker rm命令即可删除指定容器
docker rm f0b1c8ab3633
该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数
强制删除所有容器
docker rm -g $(docker ps -a -q)
使用Dockerfile构建镜像
1.示例
Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。先来编写一个最简单的Dockerfile,以前文下载的Nginx镜像为例,来编写一个Dockerfile修改该Nginx镜像的首页:
- 在/root/下新建目录docker-test,在里面创建Dockerfile文件,并增加以下内容:
FROM nginx
RUN echo '<h1>This is DockerFile test</h1>' > /usr/share/nginx/html/index.html
- 在Dockerfile所在目录下用以下命令构建镜像:
docker build -t nginx:test .
其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径
- 执行以下命令,即可使用该镜像启动一个 Docker容器:
docker run -d -p 92:80 nginx:test
test表示在上一步构建的镜像
- 在浏览器中访问
http://docker所在IP:92
:
Dockerfile文件中的常用命令:
命令 | 用途 |
---|---|
FROM | 基础镜像文件 |
RUN | 构建镜像阶段执行命令 |
ADD | 添加文件,从src目录复制文件到容器的dest,其 中 src可以是 Dockerfile所在目录的相对路径, 也可以是一个 URL,还可以是一个压缩包 |
COPY | 拷贝文件,和ADD命令类似,但不支持URL和压 缩包 |
CMD | 容器启动后执行命令 |
EXPOSE | 声明容器在运行时对外提供的服务端口 |
WORKDIR | 指定容器工作路径 |
ENV | 指定环境变量 |
ENTRYPINT | 容器入口, ENTRYPOINT和 CMD指令的目的一 样,都是指定 Docker容器启动时执行的命令,可 多次设置,但只有最后一个有效。 |
USER | 该指令用于设置启动镜像时的用户或者 UID,写在 该指令后的 RUN、 CMD以及 ENTRYPOINT指 令都将使用该用户执行命令。 |
VOLUME | 指定挂载点,该指令使容器中的一个目录具有持 久化存储的功能,该目录可被容器本身使用,也 可共享给其他容器。当容器中的应用有持久化数 据的需求时可以在 Dockerfile中使用该指令。格 式为: VOLUME[“/data”]。 |
其他镜像的Dockerfile文件配置可参考hub.docker.com
或github中的配置,如mysql在github中可以看到Dockerfile如何配置:
2.Dockerfile构建Java项目
- 拉取Java8和mysql镜像:
docker pull openjdk:8-jdk
docker pull mysql:8.0.28
# 后台启动两个服务
docker run -d openjdk:8-jdk
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name root mysql:8.0.28
- 在/root/docker-test下创建crud-demo目录,上传本地已经打包好的crud-demo.jar(上传jar包前需在idea中把服务器对应ip和数据库更改为和docker服务器匹配):
- 在该目录中创建Dockerfile文件,并添加以下内容:
# 基于哪个镜像
FROM openjdk:8-jdk
# 复制文件到容器
ADD crud_demo-0.0.5.jar /crud_demo-0.0.5.jar
# 声明需要暴露的端口
EXPOSE 8888
# 配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} -jar /crud_demo-0.0.5.jar
- 构建镜像:
docker build -t crud_demo:0.0.5 .
- 启动镜像,-d为在后台启动:
docker run -d -p 8888:8888 crud_demo:0.0.5我们可以通过以下命令查看启动的情况
docker logs [docker ps中的id ] -f
- 通过postman或浏览器接口访问服务.
3.将Java项目发布到阿里云远程镜像仓库
阿里云docker镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories
- 在镜像仓库中创建个人实例:
- 在个人实例中先创建命名空间再创建镜像仓库,镜像仓库可以关联github等账号:
-
根据镜像仓库的命令提示运行即可:
- 登录阿里云Docker Registry:
docker login --username=aliyun账号 crpi.cn-chengdu.personal.cr.aliyuncs.com
- 把镜像推送到镜像仓库(因我本地已经有该镜像,没有可按阿里云镜像仓库命令拉取或推送):
docker tag crud_demo:0.0.5 crpi-kxv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:0.0.5
- 推送到远程库:
docker push crpi-kxvv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:[镜像版本号]
- 拉取镜像:
docker pull crpi-kxvv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:[镜像版本号]
- 此时通过
docker images
查看到该镜像:
- 通过镜像id可运行该镜像,通过
docker logs [docker ps的id] -f
可查看运行情况:
docker run -d -p 9999:8888 5c962719e0b9
- 通过postman或浏览器访问接口:
4.把Java项目发布到本地仓库
- 在根据了下创建
/docker
目录,并创建docker-compose.yml
文件,文件内容如下:
version: '1'
services: registry:container_name: docker-registryimage: registry:2ports:- 5000:5000volumes:- /data/docker-registry:/var/lib/registry
- 创建
/data/docker-registry
用于指定本地库; - 启动私有仓库:
docker compose up -d
- 设置私有仓库的用户名和密码(需要先下载httpd-tools工具来设置):
yum install -y httpd-tools
# 生成密码文件
htpasswd -Bc auth.htpasswd [用户名]
- 登录本地库:
docker login 192.168.xxx.xxx:5000
# 如果登录不上去是因不支持https协议,需要在daemon.json文件中修改:
vim /etc/docker/daemon.json
增加:"insecure-registries" : ["192.168.xxx.xxx:5000"]# 修改后重启
systemctl daemon-reload && systemctl restart docker
docker ps -a
就可以看到该镜像,再通过docker start 镜像id
启动:
- 再到jar包所在目录去构建项目到仓库:
docker build -t 192.168.xxx.xxx:5000/crud-demo:版本号 .
- 通过
docker push/pull ...
就可以推送或拉取到本地库中:
- 运行镜像:
docker run -d -p 5000:5000 镜像id