0


一文带你入门docker

✅作者简介:我是18shou,一名即将秋招的java实习生

🔥系列专栏:牛客刷题专栏

📃推荐一款模拟面试、刷题神器👉 在线刷题面经模拟面试

安装Docker

**uname -r**

查看系统内核

4.18.0-193.14.2.el8_2.x86_64
[root@iZuf61ahstfl2fj58302fsZ /]# cat /etc/os-release

查看系统版本

卸载旧版本

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

Docker初装命令

1、yum 包更新到最新

 yum update 

2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2 

3、 设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

4、 安装docker,出现输入的界面都按 y

yum install -y docker-ce

5、 查看docker版本,验证是否验证成功

docker -v

Docker架构

配置阿里云镜像

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://9qztm9ao.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

每个人的地址都不同(从服务器上获取)

cat /etc/docker/daemon.json

#查看文件

Docker开启相关命令

启动Docker

systemctl start docker

查看Docker状态

systemctl status docker

停止Docker

systemctl stop docker

开机自启动Docker

systemctl enable docker

重启Docker

systemctl restart docker

Docker镜像相关命令

镜像就是打包了某一个软件和它需要的运行环境

可以去dockerhub查看镜像版本

#查看docker镜像

docker images

#docker搜寻镜像 比如 redis

docker search xxx

#docker拉取镜像

docker pull xxx

默认拉取最新版,假如指定redis版本:

docker pull redis:5.0

#docker删除镜像

[root@iZuf61ahstfl2fj58302fsZ /]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

redis 5.0 c5da061a611a 3 months ago 110MB

redis latest 7614ae9453d1 3 months ago 113MB

[root@iZuf61ahstfl2fj58302fsZ /]#

 docker rmi 7614ae9453d1
或者docker rmi redis:5.0

先通过images搜寻到对应镜像ID然后输入命令

docker rmi 7614ae9453d1

第二种方式:通过名字和版本删除

docker rmi xxx:xxx

查看所有镜像id

docker images -q

#删除所有镜像

docker rmi `docker images -q`

Docker容器相关命令

容器是镜像运行出来的实例

#运行 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令

docker run -i -t --name=xx xxx:xxxx /bin/bash

#运行已有的容器 id通过docker ps -a 查询

docker start id

#查看运行容器

docker ps

#查看所有容器

docker ps -a

#后台运行容器 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令

docker run -i -d --name=xx xxx:xxxx /bin/bash

#进入容器终端 name是之前起的名字

docker exec -i -t name /bin/bash

#停止某个容器 :name是给容器起的名字

docker stop name

#删除某个容器 :name是给容器起的名字

docker rm name

#删除所有容器:不能删除正在运行的容器

docker rm `docker ps -aq`

#查看容器的详细信息:name是给容器起的名字

docker inspect name

Docker容器、数据卷

问题1:Docker容器删除后,容器中产生的数据随之销毁

答案:持久化到数据卷

问题2:Docker容器和外部机器可以直接交换文件吗?

答案:不可以,但是可以通过数据卷间接交换,改变数据卷间接改变容器数据

问题3:容器之间想要进行数据交互?

答案:一个数据卷挂载多个容器,这些容器就可以进行数据交互了

Docker容器、数据卷命令

目录必须是绝对路径、如果目录不存在会自动创建、可挂载多个

#挂载数据卷 目录会自动创建 -v (数据卷目录) :(容器目录) (容器名称: 版本号)终端

docker run -it --name=c2 -v /root/data:/root/data_container centos:7 /bin/bash

#多容器进行数据交换的方式

#1.多个容器挂载同一个数据卷

docker run -it --name=c4 -v ~/data:/root/data redis:5.0
docker run -it --name=c3 -v ~/data:/root/data redis:5.0

#2:数据卷容器:即上图:c3挂载数据卷,c1、c2挂载c3,c1、c2、c3就可以互相传输和通信

c3称为数据卷容器

#创建启动c3数据卷容器,使用-v参数设置数据卷 volume是数据卷目录

docker run -it --name=c3 -v /volume redis:5.0 /bin/bash

#创建启动c1、c2容器,使用--volumes-from参数设置数据卷

docker run -it --name=c1 --volumes-from c3 redis:5.0 /bin/bash
docker run -it --name=c2 --volumes-from c3 redis:5.0 /bin/bash

这样c1 c2 c3就可以互相传输和通信了

Docker之部署

一、部署MySQL

记得开启所有防火墙端口包括外部连接的端口

  1. 搜索mysql镜像
docker search mysql 
  1. 拉取mysql镜像
docker pull mysql:5.6 
  1. 创建容器,设置端口映射、目录映射

在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql 
cd ~/mysql

*docker run -id *

**-p 3307:3306 **

**--name=c_mysql **

**-v $PWD/conf:/etc/mysql/conf.d **

**-v $PWD/logs:/logs **

**-v $PWD/data:/var/lib/mysql **

**-e MYSQL_ROOT_PASSWORD=123456 **

mysql:5.6

  • 参数说明:

    • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
  1. 进入容器,操作mysql
docker exec -it c_mysql /bin/bash 
  1. 使用外部机器连接容器中的mysql

二、部署Tomcat

#搜索tomcat镜像

docker search tomcat 

#拉取tomcat镜像

docker pull tomcat 
  1. 创建容器,设置端口映射、目录映射

在/root目录下创建tomcat目录用于存储tomcat数据信息

mkdir ~/tomcat 
cd ~/tomcat

*docker run -id --name=c_tomcat *

**-p 8080:8080 **

**-v $PWD:/usr/local/tomcat/webapps **

tomcat

  • 参数说明:

    • -p 8080:8080:将容器的8080端口映射到主机的8080端口**-v $PWD:/usr/local/tomcat/webapps:**将主机中当前目录挂载到容器的webapps
  1. 使用外部机器访问tomcat
  2. 在tomcat文件夹下创建test/index.html 并在index.html中写入xxx
  3. 访问106.15.89.94:8080/test/index.html

三、部署Nginx

  1. 搜索nginx镜像
docker search nginx 
  1. 拉取nginx镜像
docker pull nginx 
  1. 安装完成后,我们可以使用以下命令来运行 nginx 容器:
docker run --name nginx-test -p 80:80 -d nginx
  • --name nginx-test:容器名称。
  • -p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
  • -d nginx: 设置容器在在后台一直运行。
  1. 使用外部机器访问nginx

在html文件里面新建index.html然后访问106.15.89.94:80

四、部署Redis

  1. 搜索redis镜像
docker search redis 
  1. 拉取redis镜像
docker pull redis:5.0 
  1. 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0 
  1. 使用外部机器连接redis ./可能有问题
./redis-cli.exe -h 192.168.149.135 -p 6379

Docker镜像原理

Docker容器转化为镜像

DockerFile

hub.docker.com 当中搜索镜像的dockerfile

关键字

作用

备注

FROM

指定父镜像

指定dockerfile基于那个image构建

MAINTAINER

作者信息

用来标明这个dockerfile谁写的

LABEL

标签

用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看

RUN

执行命令

执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]

CMD

容器启动命令

提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]

ENTRYPOINT

入口

一般在制作一些执行就关闭的容器中会使用

COPY

复制文件

build的时候复制文件到image中

ADD

添加文件

build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务

ENV

环境变量

指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value

ARG

构建参数

构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数

VOLUME

定义外部可以挂载的数据卷

指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]

EXPOSE

暴露端口

定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp

WORKDIR

工作目录

指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径

USER

指定执行用户

指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户

HEALTHCHECK

健康检查

指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制

ONBUILD

触发器

当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大

STOPSIGNAL

发送信号量到宿主机

该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。

SHELL

指定执行脚本的shell

指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

DockerFile自定义centos

自定义一个可以使用vim命令的centos

#首先创建一个文件docker-file(随意起名),然后在文件中vim一个文件centos_dockerfile 输入以下指令

FROM centos:7

MAINTAINER itheima 2734@qq.com

RUN yum install -y vim

WORKDIR /usr

cmd /bin/bash

#然后docker build 对应上方vim的文件

docker build -f ./centos_dockerfile -t itheima_centos:1 .

#这样镜像就构建出来了用docker images可以查看已有镜像,发现有theima_centos,运行容器

docker run -it --name=dockerfile_centos itheima_centos:1

这时候centos就可以使用vim命令了

DockerFile部署springboot

首先将一个springboot项目打成jar包确保能运行

然后使用xftp将jar包复制到linux系统某个文件夹下(docker-files)下

然后配置文件

vim springboot_dockerfile
FROM java:8
MAINTAINER itheima <[email protected]>
ADD springbootjlvpC-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

#docker build 对应上方vim的文件springboot_dockerfile ,这个app是镜像名

docker build -f ./springboot_dockerfile -t app .

#这样镜像就构建出来了用docker images可以查看已有镜像,发现有app,运行容器

如果有mysql的配置这里会报错,因为连不上本机的mysql了。。9000s是映射端口

docker run -id -p 9000:8080 --name=dockerfile_springboot app

Docker Compose

一、安装Docker Compose

Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose

设置文件可执行权限

chmod +x /usr/local/bin/docker-compose

查看版本信息需要先设置权限

docker-compose -version

二、卸载Docker Compose

二进制包方式安装的,删除二进制文件即可 rm /usr/local/bin/docker-compose

三、 使用docker compose编排nginx+springboot项目

  • 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
  • 编写 docker-compose.yml 文件

version: '3'

services:

nginx:

image: nginx

ports:

  • 80:80

links:

  • app

volumes:

  • ./nginx/conf.d:/etc/nginx/conf.d

app:

image: app

expose:

  • "8080"

  • 创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d 
  • 在./nginx/conf.d目录下 编写itheima.conf文件

server {

listen 80;

access_log off;

location / {

proxy_pass http://app:8080;

}

}

  • 在~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up 
  • 测试访问

http://106.15.89.94/hello

Docker私有仓库

一、私有仓库搭建

#1、拉取私有仓库镜像

docker pull registry

#2、启动私有仓库容器

docker run -id --name=registry -p 5000:5000 registry

#3、打开浏览器 输入地址

http://私有仓库服务器ip:5000/v2/_catalog

,看到{"repositories":[]} 表示私有仓库 搭建成功

#4、修改daemon.json

vim /etc/docker/daemon.json

在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip

{"insecure-registries":["私有仓库服务器ip:5000"]}

#5、重启docker 服务

systemctl restart docker
 docker start registryy

二、将镜像上传至私有仓库

1、标记镜像为私有仓库的镜像

docker tag centos:7 私有仓库服务器IP:5000/centos:7 

2、上传标记的镜像

docker push 私有仓库服务器IP:5000/centos:7

三、 从私有仓库拉取镜像

#拉取镜像 之前是公网拉 现在是内网拉

docker pull 私有仓库服务器ip:5000/centos:7

标签: docker

本文转载自: https://blog.csdn.net/m0_60264772/article/details/124256737
版权归原作者 _18shou 所有, 如有侵权,请联系我们删除。

“一文带你入门docker”的评论:

还没有评论