Docker快速入门

Docker简介

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

Docekr架构

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

  • Client(Docker客户端)

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

  • Images(Docker镜像)

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

  • Container(容器)

    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安装过程

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

  • 安装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服务器处于联网状态。

  • 启动与停止Docker

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

  • 验证Docker是否安装成功

执行命令:docker info

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

到此,Docker安装完毕!

Docker配置镜像加速器

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

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

注册阿里云账号后,即可在阿里云控制台(https://cr.console.aliyun.com/#/accelerator)

vim /etc/docker/daemon.json
{ 
"registry-mirrors": ["https://ksc53x4t.mirror.aliyuncs.com"] 
}

:wq

重启docker守护程序
systemctl daemon-reload
重启docker服务
systemctl restart docker
查看docker容器信息
docker info

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

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

docker镜像操作的常用指令

搜索命令

下载镜像

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

查看本地镜像

docker images

删除镜像

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

或
docker rmi b1a27cee0cec //通过IMAGE ID删除

保存镜像为文件

docker save -o /root/tomcat.tar tomcat:8.5.57-jdk8-openjdk-slim
// -o /root/tocmat.tar 保存为文件的地址

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

docker load -i /root/tomcat.tar

Docker容器操作常用指令

使用镜像新建一个容器

docker run
	1. 创建并运行一个java容器,打印helloworld!
		docker run java:8 /bin/echo 'Hello World!'
	2. 创建一个Centos容器
		docker run -dti --name=自拟 centos:centos7 /bin/bash
			-d 表示守护式容器(用户退出容器后,容器依然可以正常运行)
			-i 运行容器
			-t 交互 后面跟交互shell脚本 /bin/bash
		centos:centos7 镜像名称
	3. 创建一个有网络使用容器
		如:创建一个容器nginx 端口为 80
		-p 端口映射 宿主机端口:容器端口

列出容器

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

停止容器

docker stop 容器的names
docker stop 容器的CONTAINER ID

强制停止容器

docker kill 容器名称或容器编号

重启容器

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

如何进入到容器

docker exec -it c1 /bin/bash

退出容器

exit

从宿主机拷贝文件到容器

docker cp 宿主文件路径 容器名:复制到容器的路径

从容器拷贝文件到宿主机

docker cp 容器名:容器路径 复制到的宿主路径

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

(如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把
权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题)
docker run -di --name=自拟镜像名称 -v 宿主文件目录:/容器目录 --privileged centos:centos7

删除容器

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

查看容器ip

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

docker inspect --format='{{.NetworkSettings.IPAddress}}' n1 //只输出ip

查看容器日志输出

 docker logs 容器名称 查看日志
 docker logs --tail="2" 容器名称 查看日志 左后2行。

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

JDK部署

  • 拉取JDK镜像

     docker pull java:8
    
  • 创建JDK容器

docker run -di --name jdk1 java:8
  • 进入容器验证Java环境
docker exec -it jdk1 /bin/bash

java -version

MySQL部署

  • 拉取MySQL镜像

    docker pull mysql:5.7
    
  • 创建MySQL容器

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

    docker run -d --name=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 mysql /bin/bash
    //登录mysql
    mysql -u root -p
    //赋外网访问权限
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    //刷新权限
    flush privileges;
    

    如上创建需要解决中文乱码问题乱码

乱码解决方案:

a. 进入mysql容器 修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
注意 因为mysql容器中不能使用vi命令,所以我们将文件拷贝到宿主机后修改后在拷贝回去
b. docker cp 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 mysql:/etc/mysql/mysql.conf.d/mysqld.cnf
d. 重启容器 docker restart mysql

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

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

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

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

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

docker run -d --name=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 --net=host -e MYSQL_DATABASE=db mysql:5.7

//开启mysql容器
docker exec -it mysql /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
flush privileges;
  • 连接MySQL容器数据库

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

posted @ 2021-10-26 21:19  Lucky_龍  阅读(141)  评论(0)    收藏  举报