Docker 信息
Docker 是一个开源的应用容器引擎,但是说白了就是一个Linux上的虚拟机
概念:快速的部署我们的应用程序,比如war包,tomcat
镜像:你安装的操作系统就是镜像,还没有安装的操作系统的包
容器:操作系统被开机启动后就叫容器
Docker的中央仓库:hub.docker.com
配置Docker中国区官方镜像
使用vi修改 /etc/docker/daemon.json 文件并添加上”registry-mirrors”: [“https://registry.docker-cn.com“],如下:
vi /etc/docker/daemon.json
{ “registry-mirrors”: [“https://registry.docker-cn.com“] //框代表可以配多个 }
加载完重载一下 systemctl daemon-reload
Docker安装
yum search docker 搜索docker
yum -y install docker 安装
service docker start 启动
service docker restart 重启
chkconfig docker on 开机启动
docker images 查看下载的镜像
docker search 镜像名 搜索镜像
docker rmi 镜像ID 删除镜像(删除前确定该镜像下没有容器)
docker pull 镜像名(docker.io/可以省略) 在服务器上将这个镜像下载
Docker 容器操作
docker run centos 创建一个容器(如果容器里无任务程序,将自动关机)
docker run -it centos /bin/bash 创建一个容器并进入 (-itd后台运行容器)
docker run --name mycentos -it centos 创建一个容器,给它赋予一个名字:mycentos,并进入
docker ps -a 显示所有正在运行或者停止的容器 每个容器都存在一个唯一id
docker inspect 容器ID|容器名字 | grep IP查看容器的ip地址(首先要检查容器是否启动,不启动查看不到ip)
docker start 容器ID|容器名字 启动容器(使用start启动后,容器是不会自动关闭的)
docker stop 容器ID|容器名字 关闭一个容器
docker exec -it 容器ID|容器名字 /bin/bash 进入容器(要先确认容器是在线状态)
docker rm 容器ID|容器名字 删除一个容器
docker rm -f 容器ID|容器名字 强制删除一个容器
curl http://ip地址 在linux访问网址
docker run -it -v /a:/b centos 创建一个容器并且将主机/a目录共享给容器的/b目录,centos是指定
镜像
然后到容器里面查看a目录下的文件,会报下面这个错
ls: cannot open directory .: Permission denied // 没有权限访问
Docker 基础配置含义
–name:给运行的容器指定一个名称
-t:伪中断,不让操作系统退出
-i:输入流,进入操作系统
-d:表示启动容器直接进入后台模式 daemon 一般如果容器中没有任何程序进程 一般直接退出(-d启动的容器使用exit退出时,容器不会关闭)
-p:端口映射
-v: 映射路径
docker exec -it -d 56fb29cfcf01 /bin/bash // 进入容器后发现没有任何程序进程,直接退出,在后台
运行docker start 56fb29cfcf01
如果用yum安装的,也可以拿yum remove卸载,比如:rz
先查看rz的名字:yum search rz会找到一个lrzsz,这个就是他的名字 lrzsz是个工具类
然后:yum remove -y lrzsz就可以卸载了
卸载Linux上的nginx
1.nginx -s stop
2.还原nginx的配置
docker安装nginx
1.进入中央仓库搜索nginx
2.进入第一个nginx
docker search nginx // 搜索
docker pull nginx // 下载
端口映射:docker run --name mynginx -v /mynginxs:/usr/share/nginx/html:rw -d -p 8080:80 nginx
// 创建一个名字是mynginx在后台运行并且指定容器的html文件路径与主机的/mynginx路径共享,rw就是赋予nginx对于共享文件的读的写的权限并且将Linux的8080端口和docker容器的端口共享
仅主机模式:docker run --net host --name mynginx -v /mynginxs:/usr/share/nginx/html:rw -d nginx
docker容器和Linux共享一个网络,包括ip和端口,但是不共享目录这样访问html里面的文件是,直接以80端口(默认80端口)访问就行了
find / -name 名字: // 全局搜索nginx的目录
docker cp 容器名|容器ID:/etc/nginx/conf.d/default.conf /
// 将指定容器的路径拷贝到主机的/目录下
当有80端口存在时,就表示nginx已启动
安装mysql,应该安装mysql-server
安装redis,应该安装redis ,redis端口:6379
安装mariadb,应该安装mariadb
1.docker search mariadb
2.docker pull mariadb (下载STARS最高的就好了)
3.docker run --net host -v /opt/docker_mariadb_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=ps123456 -e
MYSQL_ROOT_HOST=% --name mymariadb -d mariadb
4.docker start mymariadb
5.systemctl enable mariadb // 设置开机启动,可以写可以不写
docker run --net host -v /opt/docker_mariadb_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=ps123456 -e
MYSQL_ROOT_HOST=% --name mymariadb -d --restart unless-stopped docker.io/mariadb:latest
docker run --net host --name myredis -v /opt/redis_data:/data redis-server --appendonly yes
--------------------------新----------------------------增---------------------------------------------------
netstat -aon | grep 8080 查看端口是否已占用
netstat -nlp | grep 8080 查看占用端口的进程号
kill -9 进程号 结束进程号
–rm 表示当容器停止时,将容器和镜像自动删除
docker cp ./SessionTest.war mytomcat:/usr/local/tomcat/webapps 将当前目录的文件拷贝到webapps下
将项目打包成镜像:必须要有相应容器启动
docker commit mytomcat tomcat:1.0
docker save mytomcat -o tomcat1 以文件方式保存,即可转移运行
docker load -i mytomcat 将保存的加载回来
systemctl daemon-reload 重新加载服务
service docker restart 重启docker服务
maven持续集成
mvn clean package dockerfile:build -DskipTests 执行生成镜像
docker run -d -p 8761:8761 regcenter:jiaozi 启动镜像 道出8761端口
打包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_pr
iv=‘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
eureka 安装注册中心
查询:docker search eureka
下载:docker pull abalanonline/netflix-eureka
本机方式运行:docker run -itd --net host --name eureka1 netflix-eureka /bash
docker—— fastdfs 容器 操作
查询:docker search fastdfs
下载:docker pull season/fastdfs
本机方式启动tracker:docker run -itd --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker
默认启动22122端口
禁用防火墙:vi /etc/sysconfig/selinux
本机方式启动storage:docker run -itd --name storage -v ~/storage_data:/fastdfs/storage/data -v
~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.1.2:22122 season/fastdfs storage
重启虚拟机:reboot
进入容器docker exec -it storage bash
查看配置:more storage.conf
复制出来,修改配置再考回去docker cp storage.conf:/fdfs_conf ~/
考回去docker cp ./storage.conf storage:/fdfs_conf/
因为docker是精简版的系统
重启storage:docker reload storage
查看配置是否正确:fdfs_monitor fdfs_conf/storage.conf
有组号说明tracker已启动
启动客户端
docker run -itd --name fdfs_sh --net=host season/fastdfs sh
同时赋值并创建a.txt: echo dajiahao>a.txt
root@localhost:/# cd fdfs_conf
root@localhost:/fdfs_conf# fdfs_upload_file storage.conf /a.txt
group1/M00/00/00/wKiuglwGoJWARxYvAAAACZLaVGU072.txt //返回的地址,分别是:组名/地址/随机码/后缀