2022-05-27  2022-05-27    4074 字   9 分钟

三、Docker快速入门

1.Docker简介

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

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

1.1 Docker版本

1.1.1 Docker(企业版)

Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

1.1.2 Docker(免费版)

Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP

1.2 Docker架构

1.2.1 Docker daemon(Docker守护进程)

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

1.2.2 Client(Docker客户端)

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

1.2.3 Images(Docker镜像)

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

1.2.4 Container(容器)

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

1.2.5 Registry(仓库)

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

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

2.Docker安装启动

2.1 运行安装环境

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

2.2 Docker安装过程

2.2.1 下载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

2.2.2 安装Docker

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

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

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

常见问题:

当用yum安装时报错。。。
Error: Package: glibc-headers-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: glibc = 2.17-196.el7_4.2
           Installed: glibc-2.17-222.el7.x86_64 (installed)
               glibc = 2.17-222.el7
           Available: glibc-2.17-196.el7.x86_64 (ultra-centos-7.4-base)
               glibc = 2.17-196.el7
           Available: glibc-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               glibc = 2.17-196.el7_4.2
Error: Package: gcc-4.8.5-16.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: libgomp = 4.8.5-16.el7_4.2
           Installed: libgomp-4.8.5-28.el7_5.1.x86_64 (installed)
               libgomp = 4.8.2-16.el7_5
               libgomp = 4.8.5-28.el7_5.1
           Available: libgomp-4.8.5-16.el7.x86_64 (ultra-centos-7.4-base)
               libgomp = 4.8.5-16.el7
               libgomp = 4.8.2-16.el7
           Available: libgomp-4.8.5-16.el7_4.1.x86_64 (ultra-centos-7.4-updates)
               libgomp = 4.8.5-16.el7_4.1
               libgomp = 4.8.2-16.el7_4
           Available: libgomp-4.8.5-16.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               libgomp = 4.8.5-16.el7_4.2
               libgomp = 4.8.2-16.el7_4
Error: Package: glibc-devel-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: glibc = 2.17-196.el7_4.2
           Installed: glibc-2.17-222.el7.x86_64 (installed)
               glibc = 2.17-222.el7
           Available: glibc-2.17-196.el7.x86_64 (ultra-centos-7.4-base)
               glibc = 2.17-196.el7
           Available: glibc-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               glibc = 2.17-196.el7_4.2
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
 

解决办法:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

sed -i  's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
、yum repolist 

2.2.3 启动与停止Docker

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

2.2.4 验证Docker是否安装成功

执行命令:docker info

查看返回信息,能否查看到Docker相关信息

到此,Docker安装完毕!

3.Docker配置镜像加速器

国内访问Docker Hub的速度很不稳定,有时甚至出现连接不上的情况。我们来为Docker配置镜像加速器,从而解决这个问题。目前国内很多云服务商都提供了镜像加速的服务。

常用的镜像加速器有:阿里云加速器DaoCloud加速器等。各厂商镜像加速器的使用方式大致类似,笔者以阿里云加速器为例进行讲解。

注册阿里云账号后,即可在阿里云控制台(https://cr.console.aliyun.com/#/accelerator)看到类似如下的页面。

3.1 新建编辑: /etc/docker/daemon.json

{

“registry-mirrors”: [“https://ksc53x4t.mirror.aliyuncs.com”]

}

3.2 修改保存后输入如下命令重启Docker守护进程和服务

重启docker守护程序

systemctl daemon-reload

重启docker服务

systemctl restart docker

查看docker容器信息

docker info

查看最后倒数第二行出现如下内容说明配置成功

Registry Mirrors:
 https://j4pan1gm.mirror.aliyuncs.com/

4.docker镜像操作的常用指令

4.1 搜索指令

4.1.1通过镜像仓库搜索

Docker镜像仓库网址:https://hub.docker.com/search?q=&type=image

4.1.2 指令搜索

docker search tomcat //搜索tomcat镜像

4.2 下载镜像

docker pull 镜像名称 //查询最近的版本

docker pull 镜像名称:版本标签

如:

docker pull tomcat

docker pull tomcat:8.5.57-jdk8-openjdk-slim

4.3 查看本地镜像

docker images

4.4 删除镜像

docker rmi tomcat:8.5.57-jdk8-openjdk-slim //通过镜像名:版本号

docker rmi b1a27cee0cec //通过IMAGE ID删除

4.5 保存镜像为文件

docker save -o /root/tomcat.tar tomcat:8.5.57-jdk8-openjdk-slim

// -o /root/tocmat.tar 保存为文件的地址

4.6 把保存的镜像备份文件恢复成镜像

docker load -i /root/tomcat.tar

5.Docker容器操作常用指令

5.1 使用镜像新建一个容器

docker run

  1. 创建并运行一个java容器,打印helloworld!

    docker run java:8 /bin/echo ‘Hello World!’

  2. 创建一个Centos容器

    docker run -ti –name=c1 centos:centos7 /bin/bash

    -d 表示守护式容器(用户退出容器后,容器依然可以正常运行)

    -i 运行容器

    -t 交互 后面跟交互shell脚本 /bin/bash

    centos:centos7 镜像名称

  3. 创建一个有网络使用容器

    如:创建一个容器nginx 端口为 80

    -p 端口映射 宿主机端口:容器端口

5.2 列出容器

  1. 列出当前正在运行的容器 docker ps
  2. 列出当前全部容器 docker ps -a
  3. 列出当前容器的所有编号 docker ps -a -q

5.3 停止容器

docker stop 容器的names

docker stop 容器的CONTAINER ID

如:

docker stop c1

docker stop 36bee7ca1cf4

5.4 启动容器

docker start 容器名称或容器编号

docker start n1

5.5 强制停止容器

docker kill 容器名称或容器编号

5.6 重启容器

docker restart 容器名称或者容器编号

5.7 如何进入到容器

docker exec -it c1 /bin/bash

5.8 退出容器

exit

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

在宿主机上创建文件并编辑

touch java511.txt

vi java511.txt

拷贝到容器中

docker cp /java511.txt c1:/root/

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

docker cp c1:/1.java /root/2.java

5.11 挂载宿主机的制定目录到容器(其中 –privileged 是可选的)

(如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 –privileged=true 来解决挂载的目录没有权限的问题)

docker run -di –name=c2 -v /root/html:/test0722 –privileged centos:centos7

5.12 删除容器

docker rm 容器名称或者编号 //注意 不能删除正在运行中容器, 需要停掉才可以删除 -f 强制删除

5.13 查看容器ip

docker inspect n1 //输出的内容较多

docker inspect –format=’{{.NetworkSettings.IPAddress}}’ n1 //只输出ip

5.14 查看容器日志输出

docker logs n1 查看日志

docker logs –tail=“2” n1 查看日志 左后2行。

5.15、设置容器开机自启动

docker update –restart=always 容器名称 //设置开机自启动

docker update –restart=no 容器名称 //禁止开机自启动

6.Java开发者Docker常用镜像容器创建

6.1 JDK部署

6.1.1 拉取JDK镜像

执行命令: docker pull java:8

6.1.2 创建JDK容器

执行命令:docker run -di --name  jdk1  java:8

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

6.1.3 进入容器验证Java环境

docker exec -it jdk1 /bin/bash

java -version

6.2 MySQL部署

6.2.1拉取MySQL镜像

执行命令:docker pull mysql:5.7

6.2.2 创建MySQL容器

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

docker run -d --name=offcn_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scwdb  mysql:5.7 

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

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

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

//开启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;

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

show variables like ‘character_set_%’;

乱码解决方案:

a. 进入offcn_mysql容器  修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

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

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

    vi  mysqld.cnf

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

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

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

d.  重启容器  docker restart offcn_mysql

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

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

docker run -d --name=offcn_mysql -p 33306:3306  -v /root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -e MYSQL_ROOT_PASSWORD=123456 -eMYSQL_DATABASE=dongyimaidb  mysql:5.7

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

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

docker run -d --name=offcn_mysql -p 33306:3306  -v /root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -v /root/scwdb.sql:/docker-entrypoint-initdb.d/mysql.sql -e MYSQL_ROOT_PASSWORD=123456 -eMYSQL_DATABASE=dongyimaidb  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;

6.2.3 连接MySQL容器数据库

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

6.3 Redis 部署

6.3.1 拉取Redis镜像

执行命令:docker pull redis:4.0.8

6.3.2 创建Redis容器

执行命令: docker run -di --name redis -p 16379:6379  redis:4.0.8

7.Dockerfile入门(了解)

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

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

7.1 Dockerfile常用命令

7.2 自主创建jdk镜像

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

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

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

FROM centos:centos7

MAINTAINER ujiuye

RUN mkdir /usr/local/java

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

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

ENV CLASSPATH $JAVA_HOME/lib

ENV PATH $JAVA_HOME/bin:$PATH

保存文件

(4) 创建镜像 为jdk1.8

docker build -t=‘jdk1.8’ /usr/local/dockerjdk/

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

docker images

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

docker run -di –name=java1 jdk1.8

(7) 查看创建的容器

docker ps

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

docker exec -it java1 /bin/bash

java -version

7.3 自主创建tomcat镜像

(1) 创建目录 mkdir /usr/local/dockertomcat

(2) 上传jdk tomcat 到文件中

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

FROM centos:centos7
MAINTAINER ujiuye
RUN  mkdir /usr/local/app
ADD jdk-8u131-linux-x64.tar.gz /usr/local/app/
ADD apache-tomcat-8.5.15.tar.gz /usr/local/app/
ENV JAVA_HOME /usr/local/app/jdk1.8.0_131
ENV CATALINA_HOME /usr/local/app/apache-tomcat-8.5.15
ENV CLASSPATH $JAVA_HOME/lib
ENV PATH $JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
EXPOSE 8080
CMD ["/usr/local/app/apache-tomcat-8.5.15/bin/catalina.sh","run"]

(4)创建镜像 docker build -t=‘tomcat8.5:10’ .

(5)查看镜像 docker images

(6)创建容器 docker run -di –name=tomcat999 -p 5555:8080 tomcat8.5:10

(7)查看容器 docker ps

(8)访问: http://192.168.188.133:5555/


avatar
青山
悟已往之不谏 知来者之可追
一言
今日诗词
站点信息
本站访客数 :
本站总访问量 :