|
目录
Docker安装
设置ustc镜像
Docker启动和停止命令
镜像相关命令
查看&创建并交互式容器
创建并启动守护式容器
停止&拷贝&目录挂载&ip&删除
MySql容器部署
Tomcat容器部署
Nginx容器部署
Redis容器部署
Docker Compose
迁移&备份
使用Dockerfile创建镜像
Docker安装
yum包更新到最新
yum update
安装需要的软件包 yum-util提供yum-config-manager功能,另外两个是devicemanager驱动依赖的
yum install -y yum-utils device-mapper-persitent-data lvm2
设置yum源:推荐使用ustc的
yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装docker
yum install -y docker-ce
查看docker版本
docker -v
设置ustc镜像
mkdir /etc/docker
vi /etc/docker/daemon.json
文件内容:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
Docker启动和停止命令
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker 设置开机启动docker
镜像相关命令
查看所有镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
搜索镜像
[root@master ~]# docker search centos7
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ansible/centos7-ansible Ansible on Centos7 132 [OK]
拉取最新的centos,再使用docker images查看
docker pull centos
docker pull centos:7 7是版本号
删除镜像
docker rmi 指定的REPOSITORY或IMAGE ID
删除所有镜像,慎用
docker rmi `docker images -q`
查看&创建并交互式容器
容器是基于镜像运行
启动容器之后会直接进入容器的命令行终端,如果退出则容器停止运行
查看正在运行的容器 docker ps
查看所有容器 docker ps -a
创建并启动交互式容器 docker run -it --name=mycentos7 centos:7 /bin/bash 如果容器已存在会报错 exit退出终端并停止容器
-i 启动容器
-t 表示容器启动后会进入其命令行,即分配一个伪终端
-d 在run后面后加上-d参数则会创建一个守护式容器在后台运行
--name 命名容器
-v 目录挂载
创建并启动守护式容器
如果一个容器需要长期运行,可以设置为守护式容器
创建并启动守护式容器 docker run -id --name=mycentos2 centos:7
登录进入容器命令行 docker exec -it mycentos2 /bin/bash exit退出终端时不会停止容器
停止&拷贝&目录挂载&ip&删除
停止指定容器 docker stop mycentos2
运行指定容器 docker start mycentos2
复制本地文件到docker容器中 docker cp a.txt mycentos2:/
复制容器中文件到本地 docker cp mycentos2:/a.txt ./
目录挂载:在创建容器的时候,将本地目录和容器中目录进行映射,这样我们就可以通过修改本机文件从而去影响容器中的文件
创建并启动守护式容器mycentos3,并挂载本地目录 docker run -id -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7
查看容器ip docker inspect mycentos3 172.17.0.*
删除指定容器 docker rm mycentos3
删除全部容器,慎用 docker rm `docker ps -a -q`
创建并允许守护式容器mysql5.7,基于镜像centos/mysql-57-centos7(如果不存在就会下载)
docker run -id --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
MySql容器部署
因为本地已经启动了mysql服务并且端口是3306,所以端口被占用,启动失败
[root@master dd]# docker run -id --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
2df7599529b28c1c502d6583975deecd3b3e2e08841d42b1d57e757dba49fff4
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql5.7 (8ab3f48c01d3aa6b87cd4b04688de0fb5f4dd06b16bd4871eefa6d9a2621bfc5): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.
-p 端口映射,格式为:宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的远程登录密码(如果是在容器中使用root登录的话,那么其密码就为空)
进入容器命令行
docker exec -it mysql5.7 /bin/bash
进入mysql命令行
mysql -u root 或者mysql -u root -p
Tomcat容器部署
拉取最新镜像
docker pull tomcat
创建并启动镜像
docker run -id --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
如果出现警告:IPv4 forwarding is disabled. Networking will not work.执行如下操作
修改配置文件 vi /etc/sysctl.conf
net.ipv4.ip_forward=1
重启网络 systemctl restart network
浏览器访问 http://192.168.1.135:9000
访问docker tomcat返回404解决方案:https://blog.csdn.net/qq_40891009/article/details/103898876
Nginx容器部署
拉取nginx镜像,启动容器,浏览器访问nginx
nginx的默认端口为80,在创建容器的时候需要端口映射, -p指定 80:80
拉取镜像 docker pull nginx
创建并启动容器 docker run -id --name=nginx -p 80:80 nginx
查看运行中的容器 docker ps
浏览器访问nginx:192.168.1.135或者192.168.1.135:80 默认端口80时,可以不用加上80端口后缀
Redis容器部署
拉取redis镜像,创建并启动容器,端口映射为:-p 6379:6379
创建并启动容器 docker run -id --name=redis -p 6379:6379 redis
进入命令行
[root@slave2 ~]# docker exec -it redis /bin/bash
root@40492fbcad15:/data# cd /usr/local/bin/
root@40492fbcad15:/usr/local/bin# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name mwt
OK
127.0.0.1:6379> get name
"mwt"
127.0.0.1:6379> exit
root@40492fbcad15:/usr/local/bin# exit
exit
[root@slave2 ~]#
Docker Compose
docker官方开源项目,负责实现对docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。可以通过Compose修改yaml文件配置服务,然后通过一个命令来创建和运行所有服务
安装compose
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose -version
测试:编写compose模板文件,同时启动redis、tomcat和mysql容器
创建文件夹
mkdir /usr/local/mycompose
cd /usr/local/mycompose
vi docker-compose.yml
version: '3'
services:
redis1:
image: redis
ports:
- "6379:9379"
container_name: "redis1"
networks:
- dev
mysql1:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: "root"
ports:
- "3306:3306"
container_name: "mysql1"
networks:
- dev
web1:
image: tomcat
ports:
- "9090:8080"
container_name: "web1"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
重启docker服务
systemctl restart docker
[root@slave2 mycompose]# ls
docker-compose.yml
[root@slave2 mycompose]# pwd
/usr/local/mycompose
[root@slave2 mycompose]# docker-compose up -d
Creating network "mycompose_dev" with driver "bridge"
Creating network "mycompose_pro" with driver "bridge"
Creating web1 ... done
Creating mysql1 ... done
Creating redis1 ... done
浏览器访问tomcat:192.168.1.135:9090
访问docker tomcat返回404解决方案:https://blog.csdn.net/qq_40891009/article/details/103898876
迁移&备份
在一个容器中安装了各种组件,期望在其他服务器上也能快速拥有该容器的一切环境。我们可以将当前容器制作为一个镜像,再将该镜像复制到其他服务器上,其他服务器就可以基于该镜像运行容器
将容器保存为一个镜像
docker commit nginx nginx_img 格式为:容器name 镜像name
备份镜像为tar到本地当前路径下
docker save -o nginx.tar nginx_img 格式为:tar 镜像name
加载本机镜像到docker中,再执行命令docker images查看所有镜像
docker load -i ./nginx.tar
使用Dockerfile创建镜像
Dockfile就是一个文本文件,由一系列命令和参数构成。Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像
自己可以制作镜像
在centos7基础镜像上,添加jdk1.8并构建一个包含jdk1.8的centos7新镜像
拉取centos7镜像
docker pull centos:7
上传jdk1.8
编写Dockerfile文件
FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir /usr/local/java
ADD /usr/local/bigdata/tar-back/jdk-8u201-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_201
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lit/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
构建镜像
docker build -t=`jdk1.8`
基于新镜像创建并运行容器后运行java -version
|