docker
官方文档:https://docs.docker.com/engine/install/centos/
概念:
镜像:类似于Java的模板,通过镜像可以去创建多个容器,比如mysql镜像,可以通过这个镜像去创建一个mysql01的容器。
容器:可以看成是一个系统,这个系统可以运行、停止、删除等。
仓库:存放镜像的地方,比如A服务器下载了很多镜像,那么B服务器也需要用到这些镜像,仓库的作用就体现出来了。
显示行号:在vim文件中,:set nu
安装步骤:
1、先卸载
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、下载需要的安装包
sudo yum install -y yum-utils
3、设置镜像的仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、更新缓存
yum makecache fast
5、安装docker相关引擎
sudo yum install docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
7、查看docker版本信息
docker version
8、 测试运行下helloWorld
docker run hello-world 这个的话会去docker仓库拉取,最后会获取到helloWorld提示信息
9、可以去看下是否有下载helloWorld的镜像
docker images
10、配置阿里云镜像加速器
在阿里云查找容器镜像服务,找到镜像加速器,输入下面的代码。
1、sudo mkdir -p /etc/docker
2、sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://systlln3.mirror.aliyuncs.com"]
}
EOF
3、sudo systemctl daemon-reload
4、sudo systemctl restart docker
卸载docker:
1、卸载依赖:
sudo yum remove docker-ce docker-ce-cli containerd.io
2、删除资源:
sudo rm -rf /var/lib/docker
docker-compose的安装:
安装:curl -L "https://github.com/docker/compose/releases/download/1.17.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加权限:chmod +x /usr/local/bin/docker-compose
查看版本:docker-compose--version
https://my.oschina.net/yuanhaohao/blog/3061076
docker命令:
镜像命令:
1、查看服务器的所有镜像:docker images,如果镜像太多的话可以用docker images |grep mysql等方法。
** -q:只显示镜像ID docker images -q

REPOSITORY:镜像的仓库源
TAG:镜像的标签,也可以看成版本信息
IMAGE ID:镜像ID
如果输入docker images -q 那么就会显示bf756fb1ae65也就是图上的IMAGE ID
2、搜索镜像:docker search 软件名称
3、下载镜像:docker pull 软件名称[:TAG] 如 docker pull mysql:8.0,如果不加:TAG的话会下载最新版本的,此外,如果要下载对应的版本需要到dockerhub确认是否存在该版本。
4、删除指定的镜像:docker rmi -f 镜像名称或者镜像id,如果要删除全部镜像的话:docker rmi -f $(dokcer images -aq)
容器命令:
1、创建并进入容器:docker run [可选参数] 镜像名称或者镜像id
可选参数:
--name "xxxx" 自定义容器名称,用于进行区分 如docker run -name nginx01 nginx
-d:以后台方式运行
-it:使用交互方式运行,进入容器查看内容
-p 指定端口,常见的有-p 主机端口:容器端口 比如docker run -p 123:80 镜像名称 这样的话外网访问的话就是http://www.baidu.com:123
如果不想要指定的端口的话那么就docker run -p 80:80 镜像名称
2、查看正在运行的容器:docker ps [可选参数] 可选参数:-a 查看所有的容器
3、如果使用-it方式进入容器的话退出有2种方式:一种是exit直接退出并停止容器,另外一种是ctrl+p+q,退出但是不停止容器的运行。
4、删除指定的容器:docker rm -f 容器id,如果要删除全部的容器的话:docker rm -f $(dokcer ps -aq)
加上-f的话是强制删除,无论容器是否在运行;不加的话则只能删除未运行的容器
5、启动、停止、重启容器:docker start/stop/restart 容器id
6、如果容器已经启动的话,那么这个时候要进入容器的话:docker exec -it 容器id /bin/bash
7、拷贝容器的文件到服务器上:docker cp 容器id:/要拷贝的文件全路径 服务器的路径
8、查看容器的端口映射关系:docker container port 容器id
9、查看docker的内存分配:docker stats 容器id
** elasticsearch启动,由于elasticsearch太占用内存,因此需要进行内存的限制。
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:版本号
mysql启动
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xzg85586537 mysql:8.0
数据卷技术
1、作用:服务器和容器的数据同步,并且数据持久化。
-v /服务器目录:/容器目录:ro/rw
如 docker run -it -v /home:/test 镜像名称:[TAGS] 这里的ro和rw可以不写,ro表示容器内只能进行读取,容器内的配置无法修改,只能从外部进行修改;rw表示可以修改。
启动之后可以通过:docker inspect 容器id查看是否有创建数据卷,Mounts这个范围
DockerFile
作用:用来构建一个自定义镜像的文件。
1、启动:docker build -f dockerfile的路径 -t 镜像的名称:[TAG] 想要存放dockerfile的路径
** 如果dockerfile名称写成Dockerfile的话就可以忽略-f了,docker会自动去寻找。
比如在docker-dockerfile-test这个目录下有个dockerfile01的文件,
命令:[root@xiao docker-dockerfile-test]# docker build -f dockerfile01 -t xiao/centos:1.0 .
最后面的这个点表示dockerfile存储在docker-dockerfile-test这个目录下
2、dockerfile里面的命令:关键字(大写)+信息
FROM:基础镜像
MAINTAINER:作者的信息
ADD:添加文件的信息 注意,文件需要和Dockerfile在同一级目录
COPY:和ADD类似
WORKDIR:镜像的工作目录,也就说进入容器后第一时间的目录,类似于cd命令
ENV:设置环境变量
VOLUME:设置数据卷的信息
EXPOSE:指定对外的端口
CMD:容器启动会执行的命令,只有最后一条命令会生效,并且会被覆盖
ENTRYPOINT:容器启动会执行的命令,可以进行追加命令,不会被替代
RUN:镜像运行的命令,如果需要加命令的话要用[],如RUN ["ls","-a"]
比如创建一个自定义的tomcat镜像,目录:dockerfile,文件名:Dockerfile,命令行位置:/home/dockerfile,此外,服务器中需要有tomcat和jdk的压缩包
Dockerfile里面的信息
FROM centos #创建的是自定义的centos镜像,FROM 镜像名称:[版本信息]
MAINTAINER xiao<136325220@qq.com> # 如果是邮箱的话,需要用<>
COPY readme.txt /usr/local/readme.txt # 这里的的readme.txt需要和Dockerfile在同一级目录。格式:文件 容器内路径
ADD apache-tomcat-9.0.38.tar.gz /usr/local/ # 格式和COPY格式一样,文件名需要是tar.gz类型的
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
RUN yum -y install vim
EXPOSE 8080
ENV MYPATH /usr/local
WORKDIR $MYPATH #这里的/usr/local 是进入容器后第一时间的目录
# 下面这些是Dokcer中tomcat和jdk的固定写法,区别在于版本根据需求进行替换
ENV JAVA_HOME /usr/local/jdk_1.8.0_261
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.38
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.38
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA/bin
CMD /usr/local/apache-tomcat-9.0.38/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.38/logs/catalina.out
# 因为名字叫做Dockerfile,Docker会自动去寻找这个文件,因此不需要写-f ,注意后面的.
构建镜像:docker build -t xiao/tomcat:0.1 .
接着启动容器,首先查看镜像的id,比如是123ABC,docker run -d 123ABC
然后进入容器查看信息:docker exec -it 容器id /bin/bash就成功了
# 这里的话会提示报错说/usr/local/jdk1.8.0_261/jre/bin/java: No such file or directory,目前暂未解决,需要手动启动tomcat
3、多个容器之间进行同步。 --volumes-from 自定义的容器名称
比如先创建第一个容器 docker run -it --name docker01 xiao/centos:1.0 xiao/centos:1.0为镜像名称,为了避免可能有版本号的存在,可以修改成镜像id
然后再创建第二个容器 docker run -it --name docker02 --volumes-from docker01 xiao/centos:1.0
这样的话第一个容器和第二个容器的数据就可以同步了。即使是第一个容器删除了,第二个容器依旧可以获取到数据,也就是数据持久化。
4、发布镜像到dockerhub或者阿里云
dockerhub:
(1)首先需要在dockerhub注册账号,然后在命令行输入docker login -u 账号 -p 密码
(2)docker push 镜像名称:[版本信息]
阿里云:
(1)找到容器镜像服务,然后创建一个命名空间,这个就相当于是一个项目的名称。
(2)创建镜像仓库
(3)接下来的命令只要点击这个镜像,阿里云会提示如何进行操作提交镜像。
Docker网络技术:
创建自定义的网络:create
如 docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
这里的--driver bridge表示采用桥接模式创建网络;--subnet 192.168.0.0/16表示子网掩码;--gateway 192.168.0.1表示网关,也是就是第一个网络的Ip;mynet是自定义的网络名称
通过docker network inspect mynet可以到如下信息:

然后我们随便结合网络启动2个tomcat
docker run -d --name tomcat-net-01 --net mynet tomcat
docker run -d --name tomcat-net-02 --net mynet tomcat
再查看一下我们自定义网络里面的信息

最后我们可以通过启动依赖mynet自定义网络的容器去ping下我们自定义的网关192.168.0.1或者192.168.0.2/192.168.0.3都可以ping通;和--link不同的是能够实现双向ping通

浙公网安备 33010602011771号