Docker安装与指令

一.Docker是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的 Linux 机器上

一个完整的Docker有以下几个部分组成:

DockerClient客户端

Docker Daemon守护进程

Docker Image镜像

Docker Container容器[2]

Docker Registry 仓库:分 公有(Docker Hub)、私有

二.Docker的应用场景

1.Web 应用的自动化打包和发布。
2.自动化测试和持续集成、发布。
3.在服务型环境中部署和调整数据库或其他的后台应用。
4.从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

三.docker安装

docker官方中央仓库网址:https://hub.docker.com/
》》 安装 yum -y install docker
》》启动 systemctl start docker

四.docker常用命令

   1》列表显示所有的docker命令

   docker --help  
   2》开机启动命令
     chkconfig docker on
   3》常用命令解释
   docker images 查看本地使用镜像
   docker search centos(镜像名称 比如 centos,ubutu,nginx等)   搜索远程仓库中的镜像
   docker pull centos  (镜像名称)  下载远程仓库的镜像 
   docker rmi 镜像id  删除一个镜像 删除前确定该镜像下没有容器
   docker rm 容器id  删除一个创建的容器
   docker run  [可选参数] 镜像名称 【进入仓库后执行命令】
   docker run -it  centos(镜像名称) /bin/bash 在镜像运行的时候里面没有程序(比如:tomcat,nginx)也可以运行镜像
   运行某个镜像 运行后的镜像就是容器 就是进程的容器

--name 名称 指定容器名称  比如 docker run --name mycentos centos 表示运行一个为mycentos的centos仓库
 
    -t 表示打开一个伪中断  其实centos仓库就是一个精简的centos系统
    
    -i  表示持续打开输入流 用户可以输入命令 比如 打开一个容器之后 能够与用户交互 docker run -it centos  进入伪终端后exit命令退出
    
    -p 可以进行端口映射 当访问主机的端口  自动映射到docker容器的某个端口
               比如映射到docker的nginx  docker  run -p 1122:80 nginx  其他机器 访问 http://主机:1122自动访问docker容器的80端口
               
   -d 表示启动容器直接进入后台模式  daemon  一般如果容器中没有任何程序进程 一般直接退出
   -v 将主机的某个目录 映射到 docker容器的某个目录 
               比如 docer run  -it -v /data:/data1 centos  表示主机的/data和容器的/data1目录互相挂载 文件修改都会影响两个目录 可以用户传文件
               
   -h  指定容器的主机的主机名 
docker ps -a显示所有正在运行或者停止的容器  每个容器都存在一个唯一id

 docker attach 容器id   可以进入一个进入后台进程的容器
 
  docker  inspect 容器id  查看容器的详细 信息 比如查询进程id  
  
  docker  inspect 容器id | grep Pid   查看ip地址 :
  
  docker inspect 9ba6e5d59970(容器id) | grep IP  查看ip地址  
  
docker start 9ba6e5d59970(容器id)  启动一个容器(程序)

docker rm -f mycen(容器名字)  强制删除一个容器

find /(根目录) -name nginx(文件名)   全文件搜索

docker cp mynginx:/etc/nginx/conf.d/default.conf /   从mynginx:/etc/nginx/conf.d/default.conf 文件拷贝到当前目录下

docker run --name mynginx -v /mynginx:/usr/share/nginx/html:rw -d nginx  (如果不指定版本号就会下载latest(最新)版本)
docker run --name mynginx -v /mynginx:/usr/share/nginx/html:rw -d -p 8080:80  nginx  创建目录mynginx将mynginx目录里面的文件映射到/mynginx:/usr/share/nginx/html目录下面 :rw设置权限 -d容器后台运行  创建nginx容器   -p 8080:80(把8080端口映射到80端口) 映射端口
docker run --net host --name mynginx -v /mynginx:/usr/share/nginx/html:rw -d   nginx  主机共享IP的方法
下载mariadb:docker pull mariadb:5.5.60
启动:docker run --net host --name mariadb -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:5.5.60
下载redis:docker pull redis:4
启动:docker run --net host --name redis -d redis:4
查看端口是否被占用:netstat -nlp | grep 8080 
强行关闭进程:kill -9 101401(进程的编号)

五.docker构建映像

1》模拟环境

    使用centos作为基础镜像  在centos镜像中安装tomcat  然后经端口8080映射为主机80

2》构建方式(确认安装并启动docker)
1.在docker里下载:docker pull tomcat:8.5.35
2.docker run --net host --name tomcat -itd tomcat:8.5.35
启动tomcat 使用 http://主机名/是否能访问tomcat主页
3.docker cp ./sessionTest.war tomcat:/usr/local/tomcat/webapps
把要打的war包(sessionTest.war)拷贝进tomcat的webapps目录下
4.执行命令:docker commit tomcat(要打包的容器名) tomcat1(打包后的名字):123(版本号)
把打好的镜像包导出到当前目录下:docker save tomcat1(要导的包名) -o tomcat2(导出后的包名)
5.镜像加载:docker load -i tomcat2
用notepad++ 可以下载已打好的镜像包文件 下载的文件默认是:C:\Users\Administrator\AppData\Roaming\Notepad++\plugins\config\NppFTP\Cache
dockerfile构建(参考 https://docs.docker.com/engine/reference/builder/#run)
在主机 /opt目录(已经存在tomcat和jdk文件)下 添加文件 Dockerfile和你要打包的项目文件 注意:文件名字必须是Dockerfile
编辑Dockerfile文件

基于tomcat镜像来构建
FROM tomcat   注:如果有版本号必须要带上版本号 (比如: :8.5.35)
将要打包的文件拷贝到tomcat  /webapps目录下
COPY ./sessionTest.war /usr/local//tomcat/webapps

进人docker目录,执行命令 :docker build -t tomcat1(打包好的镜像名):234 . (#最后一个.表示当前目录 -t表示镜像名称:tag)

异常:Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority. 如果出现这个异常 是因为版本不对或者没有这个版本 改成和tomcat(服务器)一样的版本就行

六.使用maven远程构建

一 。docker远程服务

docker默认情况下 本机 使用 docker命令操作镜像和容器 docker提供了 -H可以连接远程的docker服务器镜像远程镜像
和容器管理,项目中使用maven可以通过DockerFile远程连接并构建镜像 ,达到快速测试的目的

默认docker服务启动 用vi命令进入 文件(/usr/lib/systemd/system/docker.service)编辑文件
在–seccomp-profile=/etc/docker/seccomp.json \后面 添加一行(表示启动2375端口 用于监听远程操作)
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重新加载服务器:systemctl daemon-reload
重启docker服务:service docker restart
二。使用dockerfile插件远程构建docker
在eclipse中添加 tomcat项目 并且设置好tomcat环境 项目根目录下添加 Dockerfile文件

FROM tomcat:8.5.35
COPY target/st.war /usr/local//tomcat/webapps

pom.xml中分别添加添加dockerfile-maven-plugin【官网 https://github.com/spotify/dockerfile-maven】用于远程生成镜像 spring-boot-maven-plugins用于制定打包后的main方法类

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.ps</groupId>
  <artifactId>sessionTest1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
  	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>3.0.1</version>
		    <scope>provided</scope>
		</dependency>
  	
  
  </dependencies>
  
	<build>
		<!-- 设置打包成什么名字 -->
		<finalName>st</finalName>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <repository>st</repository>
                    <tag>1</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.war</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
             
        </plugins>

	</build>
</project>

系统环境变量中添加一个环境变量 用于制定 docker的主机和端口
在这里插入图片描述
项目打包 (会在项目下 生成 REGSERVER-SNASHOT-0.0.1.jar )
mvn package
执行生成镜像
mvn clean package dockerfile:build -DskipTests
生成成功后 可以看到生成的镜像 在docker容器里面就可以看见镜像了:docker images
启动镜像就可以访问了

七.制作mariadb镜像包

1.启动容器
docker run --net host --name mydb -itd centos
2.安装mariadb
yum -y install mariadb
3.启动mariadb
 注意精简版centos容器中无法启动mariadb的服务,无法正常启动
 mariadb使用mysqld启动注意以下几点:
 1 。linux上的mariadb只能使用mysql账户才能启动 root账号是无法启动
    使用在启动容器加上 --user mysql指定使用mysql用户执行
 2 。如果没有使用服务启动,默认的数据库mysql没有  解决访问:
   》》跳过权限表启动
     docker exec -d --user mysql mydb /usr/libexec/mysqld --skip-grant-tables
   》》创建mysql数据库
     docker exec --user mysql mydb mysql -uroot -e "create database mysql"
   》》更新mysql数据库创建哪些字典表 比如用户表
     docker exec --user mysql mydb mysql_upgrade -uroot
   》》进入mysql.user表添加 root % 和 root localhost  abc %等账户
     insert into mysql.user(host,user,password) values('%','root',password('123456'));


update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';
   》》 重新关闭容器,使用权限表启动
    docker exec --user mysql mydb /usr/libexec/mysqld
   》》制作镜像
    docker commit 容器 镜像
   》》使用容器启动
    docker run --net host --name mydb -itd  --user mysql mmmdb:1 /usr/libexec/mysqld
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值