Docker安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 curl -fsSL https: sudo systemctl start docker sudo docker run hello-world sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
Docker常用命令 1、开机自启
1 2 -- d后台运行 restart=always自启动 docker run --name=myNginx -d --restart=always nginx
2、修改成开机自启
1 docker update 容器id --restart=always
3、重启Linux
4、强制删除镜像
1 2 -- 注意镜像id 支持前模糊匹配,只要是唯一表示标识 docker rm -f 镜像id
5、端口映射
1 2 -- 主nginx开放88端口,然后映射到实际需要访问的nginx80端口 docker run --name=myNginx -d --restart=always --p 88:80 nginx
6、容器修改
1 2 3 4 5 6 7 docker exec -it 容器id /bin/bash -- 或者 docker exec -it 容器id /bin/sh 修改文件,比如nginx的页面内容 /usr/shart/nginx/html /usr/shart/nginx/html
7、查看容器日志,排错
8、查看启动的容器是否有nginx
其他:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ---------------------搜索下载------------------------- docker search 镜像名称 docker pull 镜像名称:版本号 docker pull 镜像名称 ---------------------查看------------------------- docker images docker ps docker ps -a docker container ls ---------------------删除------------------------- docker rm 容器ID docker rm -f 容器ID docker rmi 镜像名称/ID ---------------------删除含有正在运行容器的镜像------------------------- docker ps docker stop 容器id docker rm 容器ID docker images docker rmi 镜像名称/ID ---------------------基本------------------------- docker run -p 本地主机端口号:容器服务端口号 --name 容器名字 [-e 配置信息修改] -d 镜像名字 docker start 容器ID docker stop 容器ID ---------------------日志------------------------- docker log 容器id/容器名 ---------------------linux查看进程-------------------------- ps -ef | grep 名称(如:tomcat)
Docker配置阿里云镜像加速器 docker本身的仓库非常慢,但是国内有阿里云的镜像仓库非常快。下面我以阿里云镜像加速器为例配置。注意:针对Docker客户端版本大于 1.10.0 的用户
1、注册阿里云,进入官网,找到 容器镜像服务 中的 镜像加速器
2、找到daemon.json文件,并编辑
1 vim /etc/docker/daemon.json
3、添加加速器配置,然后保存文件
1 2 3 { "registry-mirrors": ["加速地址"] }
比如
1 2 3 4 5 { "registry-mirrors" : ["https://kfwkfulq.mirror.aliyuncs.com" ]}
4、重启docker服务
1 2 3 sudo systemctl daemon-reload sudo systemctl restart docker
然后下载的时候速度就快多了。
引自-CSDN博主:JAVA码上飘
Docker安装MySQL数据库 环境:Centos 8, Docker1.13.1
1、docker仓库搜索mysql
2、docker仓库拉取mysql
1 2 docker pull mysql docker pull mysql:8.0
3、查看本地镜像是否下载成功
4、安装运行mysql8.0容器
1 2 3 4 5 6 7 docker run -p 3307 :3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 ---------------------------------- -p 将本地主机的端口映射到docker容器端口(默认端口3306 ,因为本机的3306 端口已被其它版本占用,所以使用3307 ) --name 容器名称命名 -e 配置信息,配置root密码 -d mysql8.0 后台启动
看到如下界面,就表示mysql启动成功啦。
5、查看mysql8.0容器运行情况
6、docker登录mysql
1 2 docker exec - it mysql8.0 bash mysql - uroot - p
如图所示,则表示我们已经 成功连上mysql 了。
注意: 如果登录出现以下错误,先确认自己密码是否错误,如果确认无误后。就要检查mysql启动的时候是不是少了什么参数,因为也会导致连接失败。比如:docker run –name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 这种都是有问题的
7、使用客户端连接工具(Navicat)远程登录mysql
然后就大功告成了。
Docker安装JDK 1.安装jdk
1 2 3 4 5 docker pull primetoninc/jdk:1.8 docker run -d -it 镜像id /bin/bash
2.进入jdk镜像
1 docker exec -it 2e3043568107 /bin/bash
3.查看jdk版本
1 2 3 4 [root@2e3043568107 /]# java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8 .0_152 -b16) Java HotSpot (TM) 64 -Bit Server VM (build 25.152 -b16, mixed mode)
4.查看jdk目录路径
1 2 [root@2e3043568107 /]# echo $JAVA_HOME /usr/local/jdk1.8 .0_152
注意 :创建容器的时候一定要使用 -it /bin/bash 这种方式,要不然jdk的容器起不来。
Docker安装Tomcat 1、启动Tomcat容器
1 2 3 4 5 6 7 8 9 10 11 docker pull tomcat docker run --name mytomcat -d tomcat:latest docker run -d -p 8181 :8080 tomcat docker run --name myTomcat -d -p 8181 :8080 容器id / 镜像名称 --------------------------------------- -d:后台运行 -p:将主机的端口映射到容器的一个端口,即 主机端口:容器内部的端口
2、查看已经启动的容器:docker ps
3、使用8181端口访问Tomcat,记得 先把8181端口放行
4、访问失败,页面显示 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在
5、先查看防火墙状况
1 service firewalld status
出现下图所示代码,表示已经关闭防火墙
如果防火墙没关闭,先关闭防火墙
1 2 3 4 5 6 7 8 # 关闭防火墙 systemctl stop firewalld.service # 禁止防火墙开机启动 systemctl disable firewalld.service # 启动docker systemctl start docker # 重启docker systemctl restart docker
6、如果防火墙已经关闭但访问tomcat还是失败,那么使用如下命名进入tomcat的目录
1 docker exec -it a5f02a3e6dde (启动的tomcat容器的容器id) /bin/bash
7、查看当前文件夹内的所有文件
8、进入webapps文件夹下,如果显示total 0,我们就需要把webapps.dist中的内容复制到webapps文件夹下
1 2 3 rm -rf webapps cp -r webapps.dist webapps cd webapps
9、然后查看是否有可运行的容器:docker ps ,如果tomcat在运行即可正常访问了。
感谢CSDN博主-shawn_zhouii
Docker安装RabbitMQ RabbitMQ安装和基本配置 1、安装RabbitMQ服务
1 docker pull rabbitmq:3-management //注意docker pull rabbitmq如果安装这个是后面不能访问管理网页的
2、查看安装的RabbitMQ的镜像id
3、启动RabbitMQ
1 docker run -d -p 5672 :5672 -p 15672 :15672 --name myrabbitmq 镜像id
4、访问RabbitMQ管理平台
1 2 通过:[服务器ip :15672 访问] 默认账号密码为:guest
5、添加队列queues
目前只需要用到blue,blue.emps,blue.news,coderblue.news
6、添加Exchanges交换机,并绑定队列
注意:
Exchange一共有四种类型:direct、topic、headers 和fanout 。
效率:fanout > direct > topic
Direct Exchange:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行比较,如果相等,则发送到该Binding对应的Queue中。(全路径匹配)
Topic Exchange:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行对比 ,如果匹配上了,则发送到该Binding对应的Queue中。(与关联的对比匹配,可模糊匹配) 。匹配规则如下:
* :匹配一个单词
# :匹配0个或多个字符
* ,#:只能写在.号左右,且不能挨着字符
单词和单词之间需要用.隔开
Fanout Exchange:直接将消息转发到所有binding的对应queue中 ,这种exchange在路由转发的时候,忽略Routing key。(广播到所有)
Headers Exchange:将消息中的headers 与该Exchange相关联的所有Binging中的参数进行匹配,如果匹配上了,则发送到该Binding对应的Queue中。
感谢:CSDN博主-做个好人好吗
RabbitMQ使用 下面以Springboot工程(版本2.3.3.RELEASE)为例,操作rabbitmq
1、配置properties
1 2 3 4 spring.rabbitmq.host=服务器ip spring.rabbitmq.username=guest spring.rabbitmq.password=guest #spring.rabbitmq.port=5672
2、添加MQConfig配置文件,更改默认的序列化规则
1 2 3 4 5 6 7 8 @Configuration public class MQConfig { @Bean public MessageConverter messageConverter () { return new Jackson2JsonMessageConverter (); } }
3、创建UserInfo实体类
1 2 3 4 5 6 7 8 9 10 @Data public class UserInfo { private String userName; private Integer age; }
4、使用Junit5测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 @SpringBootTest class RabbitmqApplicationTests { @Autowired RabbitTemplate rabbitTemplate; @Autowired AmqpAdmin amqpAdmin; @Test void contextLoads () { HashMap<String, Object> map = new HashMap <>(); map.put("msg" , "这是converAndSend发送的消息" ); map.put("data" , Arrays.asList(2 , "helloWorld" , false )); rabbitTemplate.convertAndSend("exchange.direct" , "blue.news" , map); } @Test void contextLoadsObject () { rabbitTemplate.convertAndSend("exchange.direct" , "blue.users" , new UserInfo ("Kity" , 20 )); } @Test void sendMsg () { rabbitTemplate.convertAndSend("exchanges.fanout" , "" , new UserInfo ("fanout" , 20 )); } @Test public void createExchange () { amqpAdmin.declareExchange(new DirectExchange ("amqpadmin.exchange" )); System.out.println("创建完成" ); amqpAdmin.declareQueue(new Queue ("amqpadmin.queue" , true )); amqpAdmin.declareBinding(new Binding ("amqpadmin.queue" , Binding.DestinationType.QUEUE, "amqpadmin.exchange" , "创建绑定规则" , null )); } @Test public void deleteQueue () { amqpAdmin.deleteQueue("amqpadmin.queue" ); amqpAdmin.deleteExchange("blue.users" ); } @Test public void receive () { Object o = rabbitTemplate.receiveAndConvert("blue.users" ); System.out.println(o.getClass()); System.err.println(o); } }
5、监听接收对应匹配队列的消息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Service public class UserInfoService { @RabbitListener(queues = "blue.users",containerFactory = "rabbitListenerContainerFactory") public void receive (UserInfo userInfo) { System.out.println("接收到的userInfo:" + userInfo); } @RabbitListener(queues = "blue") public void receiveMsg (Message message) { System.out.println(Arrays.toString(message.getBody())); System.out.println(message.getMessageProperties()); } }
Docker安装Elasticsearch 1、下载ES
1 2 3 docker pull elasticsearch doker pull elasticsearch:7.8 .0
2、运行ES
1 2 3 4 5 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200 :9200 -p 9300 :9300 --name 自定义ES名称 镜像id docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200 :9200 -p 9300 :9300 --name esearch elasticsearch:7.8 .0
注意:如果服务器内存不够,即便启动了,ES被访问的时候也很有可能宕机!
常见问题解决方案 先通过命令查看 ES 日志
docker logs -f 容器id
1.下载提示elasticsearch:latest not found
问题:docker pull elasticsearch
报错:Error response from daemon: manifest for elasticsearch:latest not found
指定版本号:docker pull elasticsearch:7.8.0
原因:Note: Pulling an images requires using a specific version number tag. The latest tag is not supported. For Elasticsearch versions prior to 6.4.0 a full list of images, tags, and documentation can be found at docker.elastic.co.
官方-原因
2、内存问题
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error=’Cannot allocate memory’
可以通过启动的时候设置参数 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 或者 修改 JVM空间分配
具体操作如下: find / -name jvm.options,然后使用 vi或者vim命令编辑jvm.options文件
将
修改为
保存退出重新启动ES即可
3、参数vm.max_map_count问题
启动时报max virtual memory areas vm.max*_map_count [65530] likely too low, increase to at least [262144]*
需要修改机器max_map_count:
1 2 3 输入命令:sudo sysctl -w vm.max_map_count=262144 或者修改 /etc/sysctl.conf 文件,添加 “vm.max_map_count”设置
设置后,可以使用sysctl -a查看
4、默认的发现设置不适合生产使用
ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
修改 elasticsearch.yml, 取消注释保留一个节点,如果没有就添加
1 cluster.initial_master_nodes: ["node-1"]
这个的话,这里的node-1是上面一个默认的记得打开就可以了。然后重启即可。
5、成功启动且日志没问题了,但是无法访问
通过命令 netstat -aon|grep 9200 查询发现elasticsearch默认绑定host是不是 0.0.0.0:*。
elasticsearch安装 及 启动异常解决
docker安装运行es遇到的坑
docker启动elasticsearch失败–jvm内存不足解决方案
Docker安装zookeeper 1、下载zookeeper
2、启动zk
1 docker run --name zk -p 2181 :2181 --restart always -d 镜像id
3、查看已注册的服务
1 2 3 4 5 6 7 8 docker exec -it add905a36402(CONTAINER ID) bash cd bin ./zkCli.sh ls /services
Docker安装Jenkins 1.安装jenkins
1 2 3 To use the latest LTS: docker pull jenkins/jenkins:lts To use the latest weekly: docker pull jenkins/jenkins
2.在启动Jenkins时,需要先创建一个Jenkins的配置目录,并且挂载到docker 里的Jenkins目录下
1 2 3 4 mkdir -p /var /jenkins_home chown -R 1000 /var /jenkins_home
3.运行jenkins容器
1 2 3 4 5 6 7 8 9 10 11 docker run \ -u root \ --rm \ -d \ -p 8080 :8080 \ -p 50000 :50000 \ -v jenkins-data:/var /jenkins_home \ -v /home/git:/home/git \ -v /usr/local/jdk1.8 .0_152 :/usr/local/jdk1.8 .0_152 \ 94edb7426805 (镜像id 或者 REPOSITORY名称)
Docker会在宿主机上创建一个数据卷jenkins-data,容器映射该卷以持久化数据。 Tips:9000端口用来公开访问+Web+界面,50000+端口允许访问远程+Java+(JIRA)+API
4.配置Jenkins
访问http://<你的ip>:9000访问Jenkins。如果无法访问请检查系统防火墙、云的安全组设置
可以看到需要我们输入密码。
首选进入容器:
1 docker exec -it jenkins /bin/bash
然后查看密码:
1 cat /var /jenkins_home/secrets/initialAdminPassword
输入完密码后,此时进行下一步你会看到此界面,点击 Install suggested plugins(推荐安装)。
5.全局工具配置
很多时候不知道到底要将容器的哪几个目录挂载到宿主机上,这里有个方法docker inspect jenkins :主要是获取容器/镜像的元数据
可以查看到:env变量中的路径值
然后就可以看到Jenkins成功找到了jdk配置的目录了,其他照旧
镜像传输 1、提交改变成新的镜像
1 docker commit -a "作者" -m "提交内容" 容器id 镜像名:版本号
2、物理传输
1 2 3 4 5 6 -- 保存镜像文件成tar包 docker save -o 生成自定义的文件名.tar 镜像name:版本号 -- 传输文件到另外的服务器 scp 生成自定义的文件名.tar root@接收文件ip服务器:/root/ -- 加载tar包 docker loder -i 镜像name:版本号
3、推送仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 -- 把旧镜像的名字,改成仓库要求的新版名字 docker tag lauynginx:v1.0 lauy/lauynginx:v1.0 -- 登录到docker hub docker login docker logout (推送完成镜像后退出) --推送docker hub docker push lauy/lauynginx:v1.0 -- 别的机器下载 docker pull
挂载数据到外部修改 1 2 3 4 5 6 7 docker run --name=mynginx \ -d --restart=always \ -p 88:80 -v /data/html:/usr/share/nginx/html:ro \ nginx rw: 读写 ro: 容器里面不能修改,只能外部修改内容
如果使用ro模式,默认访问会出现403:
因为/data/html目录是空的,那么容器里的/usr/share/nginx/html也是空的
docker修改nginx配置文件便捷操作 1 2 3 4 5 6 7 8 9 10 11 12 docker run -d -p 80:80 \ -v /data/html :/usr/share/nginx/html:ro \ -v /data/conf/nginx.conf:/etc/nginx/nginx.conf \ --name mynginx-02 \ nginx 注意:最好conf目录下就存在这个文件nginx.conf,不然容易被当成文件夹,报错 docker cp 容器id :/etc/nginx/nginx.conf /data/conf/nginx.conf docker cp /data/conf/nginx.conf 容器id :/etc/nginx/nginx.conf
docker挂载redis 设置自启动并持久化,将配置文件暴露在主机里,可以直接修改
1 2 3 4 5 6 7 /etc/redis/redis.conf为docker安装redis下的配置文件目录 /data/redis/redis.conf为挂载暴露到主机里的配置文件目录 /data为docker下redis持久化目录 /data/redis/data为挂载暴露到主机里持久化目录 redis-server /etc/redis/redis.conf 自启动
为redis设置密码
1 2 appendonly yes # 持久化 requirepass pwd # 密码登录
docker构建应用镜像 Dockerfile
构建命令
1 docker builder -T 应用名:版本号 .
启动命令
1 docker run -d -p 8080:8080 应用名:版本号
Docker命令集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 Management Commands: container Manage containers image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker volume Manage volumes Commands: attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container' s filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
常见问题: 1、docker-Error: No such container,附docker常用命令
打算删除掉docker镜像但是发现有几个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such container的错误,最后终于找到了办法直接删除文件,步骤如下:
root用户:查看所有容器
1 2 3 docker ps docker stop 查出来的容器id
如果这样还不行的话就尝试下如下操作。进入 /var/lib/docker/containers 文件下
1 cd /var/lib/docker/containers
回到docker目录下,删除containers文件下的容器
不能删除的就是正在运行的,要先停止。
如图,我们可以看到有两个停止的容器被删除了。
2、解决删除镜像时image is referenced in multiple repositories
解决: 查看镜像,仔细观察,发现0d64f46acfd1这个镜像id指向了两个repository ,因此无法删除
故删除时可以用repository和tag的方式来删除
重新查看就发现最新版本的mysql已经被删除了
参考-思否博主:张德Talk 参考-博客园:_你的眉宇