Docker的学习

Updated on with 0 views and 0 comments

Docker的学习

Docker

是什么

Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期。

Docker官方网站:https://www.docker.com/

Docker

Docker 企业版、免费版

Docker架构

image-20210906102723262

Docker daemon(Docker守护进程)

Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之通信。

Client(Docker客户端)

Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。

Images(Docker镜像)

Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。

Container(容器)

容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器。

Registry(仓库)

Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝。

一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。

Docker 安装

采用Linux操作系统,版本为:Centos7.0 64位,Docker采用CE版:18.06.0.ce-3

下载Docker-CE rpm安装包

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

注意下载版本要和操作系统版本对应。

docker-ce-18.06.0.ce-3.el7.x86_64.rpm

  1. 安装Docker

    上传 docker-ce-18.06.0.ce-3.el7.x86_64.rpm

    执行命令: yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm

    注意:确保linux服务器处于联网状态。

  2. 启动、关闭、重启、查看状态

    systemctl start|stop|restart|status docker
    
  3. 启动之后查看信息

    docker info 
    
  4. 配置加速器

    查看页面内容

    https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors


image-20210906221316558

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://bijw7xq9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像修改成功 查看 docker info 多了如下内容

image-20210906221757568

  1. 查看镜像 查看中央仓库的镜像

    https://hub.docker.com/

    搜索并下载 压缩版 Tomcat 镜像

    image-20210906223108091

    docker pull tomcat:8.5.70-jdk8-openjdk-slim
    

镜像管理

  1. 下载镜像

    dcker pull 镜像名:tag 名

  2. 查看本地镜像

    docker images

    对于镜像定位两种方式 ImageID 和 REPOSITORY:Tag

  3. 删除镜像(前提: 当前镜像没有创建容器)

    docker rmi 镜像定位

  4. 将 docker 镜像保存到本地(操作系统中)

    docker save -o 存储路径/文件名 镜像定位(建议使用 REPOSITORY:Tag 这种方式,保证名字是存在的)

  5. 将本地备份文件还原到docker中

    docker load -i 存储路径/备份文件名

容器管理

  1. 通过 镜像 创建容器

    docker run 选项 【端口】 镜像定位

    选项:

    -i 运行容器 (必选)

    -d 守护式容器,容器以守护进程的形式运行 (必选)

    --name 容器名 (容器的定位标识 IMAGE)

    -p 宿主主机端口:容器端口 用来定义宿主主机和容器端口的绑定

    image-20210906143852032

  2. 罗列容器

    docker ps 选项

    选项:

    -a 罗列所有的容器 包括已经停止的容器

  3. 删除容器

    docker rm 容器定位

    说明:被删除的容器必须是退出状态

  4. 停止容器

    docker stop 容器定位

  5. 强制停止容器

    docker kill 容器定位

  6. 启动容器

    docker start 容器定位

  7. 进入容器

    docker exec -it 容器定位 /bin/bash

    说明:

    -t 和容器进行交互 必须搭配 /bin/bash

    前提:

    当前容器必须是启动状态

  8. 退出容器

    exit

    image-20210906141353219

  9. 查看容器信息

    docker inspect 容器定位

  10. 导入和导出容器

    导出容器

    docker export --output="导出的路径" 容器定位

    导入容器

    docker import 导入的路径

    docker 导入导出 版本问题 经常出现问题

  11. 查看容器的日志

    docker logs 容器定位

    选项:

    --tails="5" 最后5行

宿主主机和容器之间的交互

  • 文件拷贝

    宿主主机中完成的

    从宿主主机拷贝文件到容器

    docker cp 宿主主机文件路径 容器名:容器的文件路径

    从容器拷贝文件到宿主主机

    docker cp 容器名:容器的文件路径 宿主主机文件路径

  • 挂载目录

    将宿主主机的目录 挂载到 容器中 ,两个操作系统同时操作一个目录,必须在 创建容器的时候 进行挂载

    属性说明:

    -v 宿主主机被挂载的目录:容器中挂载的路径
    
    -- privileged 被挂载的目录在容器中授予权限
    

    docker run -id --name=mycentos01 -v /r**t/images/:/images --provileged centos:centos7

安装管理

Tomcat的安装

image-20210906235926536

进入容器

docker exec -it mytomcat /bin/bash

修改 webapps.dist 为 webapps

退出 exit

#重启容器docker
docker stop mytomcat
docker start mytomcat

进入 8080 查看Tomcat

image-20210907001156963

JDK的安装

拉取JDK镜像

执行命令: docker pull java:8

创建JDK容器

执行命令:docker run -id --name myjdk java:8

说明:jdk安装的是openjdk,具体安装路径是:/usr/lib/jvm/java-1.8.0-openjdk-amd64

进入容器验证Java环境

docker exec -it jdk1 /bin/bash
java -version

image-20210907002809473

MySQL的安装

拉取MySQL镜像

执行命令:docker pull mysql:5.7

创建MySQL容器

第一种创建容器MySQL容器的方式

远程连接mysql数据库只需要使用宿主机ip和端口3306就可以

使用属性之前需要加入 -e

docker run -d --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb  mysql:5.7 

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口

-e MYSQL_ROOT_PASSWORD=root//表示设置root的密码为root

-e MYSQL_DATABASE=mydb//创建mysql数据库容器的同时初始化创建一个数据库 mydb

// 不赋予也可
//开启mysql容器
docker exec -it mysql01 /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
//刷新权限
flush privileges;

连接数据库 创建表 中文会出错

image-20210907005143240

image-20210907005238407

如上创建需要解决中文乱码问题乱码(默认是latin1)

show variables like 'character_set_%'; 

image-20210907005517099

乱码解决方案:

a. 进入mysql01容器  

docker exec -it mysql01 /bin/bash

修改配置文件

cd /etc/mysql/mysql.conf.d/mysqld.cnf

注意 因为mysql01容器中不能使用vi命令,所以我们将文件拷贝到宿主机后修改后在拷贝回去

b. docker cp mysql01:/etc/mysql/mysql.conf.d/mysqld.cnf /root/images

    vi  mysqld.cnf

   找到[mysqld]   在其下添加编码处理

   character-set-server=utf8
   collation-server=utf8_general_ci
   
   保存

c.  docker cp /root/images/mysqld.cnf  mysql01:/etc/mysql/mysql.conf.d/mysqld.cnf

d.  重启容器  docker restart mysql01

第二种创建容器MySQL容器的方式

创新容器同时创建表的时候,解决中文问题(使用挂载的方式,将刚刚解决乱码的mysqld.cnf 挂载下容器中相应的位置)

docker run -d --name=mysql02 -p 3306:3306  -v /root/images/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -e MYSQL_ROOT_PASSWORD=root -eMYSQL_DATABASE=mydb  mysql:5.7

第三种创建容器MySQL容器的方式

在创建mysql容器时候,执行初始化数据库脚本 (将scwdb 数据库导出, 其中不要勾选 添加创建数据库语句 ,然后上传到 宿主机root目录)

连接MySQL容器数据库

挂钟挂载的操作 修改数据库配置文件

增加sql

image-20210906153212420
docker run -d --name=mysql03 -p 3308:3306  -v /root/images/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -v /root/dongyimaidb.sql://docker-entrypoint-initdb.d/mysql.sql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb  mysql:5.7 
//开启mysql容器

docker exec -it offcn_mysql /bin/bash

//登录mysql

mysql -u root -p

//赋外网访问权限

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

//刷新权限

flush privileges;

Redis的安装

拉取Redis镜像

执行命令:docker pull redis:4.0.8

创建Redis容器

执行命令: docker run -id --name myredis -p 6379:6379  redis:4.0.8

DockerFile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像(centos或者ubuntu,即操作系统级别的镜像)并最终创建一个新的镜像。

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  • 对于运维人员:在部署时,可以实现应用的无缝移植。

DockerFile

自主创建jdk镜像

(1) 创建一个目录: mkdir /usr/local/dockerjdk

(2) 上传 jdk-8u131-linux-x64.tar.gz到 /usr/local/dockerjdk/

(3) 创建一个 Dockerfile 文件 并编辑 vi Dockerfile 内容如下

FROM centos:centos7

MAINTAINER hbjava

RUN mkdir /usr/local/java

ADD jdk-8u201-linux-x64.tar.gz  /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_201

ENV CLASSPATH $JAVA_HOME/lib

ENV PATH $JAVA_HOME/bin:$PATH

保存文件

(4) 创建镜像 为jdk1.8

docker build -t="myjdk:1.8" /root/dockerjdk

(5) 查看已经创建的镜像

docker images

(6) 使用自定义的镜像创建一个容器

docker run -id --name=myjava myjdk:1.8

(7) 查看创建的容器

docker ps

(8) 验证自定义容器jdk环境是否正常

 docker exec -it myjava /bin/bash

 java -version
 
 ls
 
 cd /usr/local/java/jdk1.8.0_201

自主创建tomcat镜像

(1) 创建目录 mkdir /root/dockertomcat

(2) 上传jdk tomcat 到文件中

(3) 创建Dockerfile vi Dockerfile 内容如下

FROM myjdk:1.8
RUN mkdir /usr/local/tomcat
ADD apache-tomcat-8.5.15.tar.gz /usr/local/tomcat
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-8.5.15
ENV PATH $CATALINA_HOME/bin:$PATH
EXPOSE 8080
CMD ["/usr/local/tomcat/apache-tomcat-8.5.15/bin/catalina.sh","run"]

(4)创建镜像

 docker build -t "mytomcat:8.5.15" /root/dockertomcat

(5)查看镜像

docker images

image-20210907100907376

(6)创建容器

docker run -id --name mytomcat02 -p 9090:8080 mytomcat:8.5.15

(7)查看容器 docker ps

(8)访问: http://192.168.153.130:9090/

image-20210907101306844


标题:Docker的学习
作者:HB2Ocean
地址:http://future-hb.top:8080/articles/2021/09/12/1631455879247.html