讲的太好了,一天看了20多个视频,如果学Docker,推荐学习。

学习记录

学习笔记

弱小和无知不是生存的障碍,傲慢才是。

看视频快速记录的笔记,格式可能不太好,但是每一行命令都是运行过的

  1. 系统内核版本查看
uname -r
  1. 系统信息
cat /etc/os-release
  1. 帮助文档
    https://docs.docker.com/engine/install/ubuntu/
# 启动docker
systemctl start docker
# hello word
sudo docker run hello-world
# 运行镜像
sudo docker run -it ubuntu bash
# 查看镜像
sudo docker images

每次输入命令都需要sudo很不方便,可以查看这个官方文档修改

https://docs.docker.com/engine/install/linux-postinstall/

如果不想看,最简单的办法是执行下面的命令,作用是将当前登录的用户加入docker用户组,这样就不需要sudo了,然后记得注销用户重新登录一下。

sudo groupadd docker
sudo usermod -aG docker $USER

镜像加速

  1. 创建或修改 /etc/docker/daemon.json 文件,并写入以下内容:

    直接用tee来快速创建文件,并且写入内容

sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}
EOF
  1. 重新启动 Docker 服务 。重启之前可以 docker ps看下自己起了哪些服务,别忘了重启
systemctl daemon-reload
service docker restart
  1. docker info查看是否生效
    在最下面有这两行即为成功
Registry Mirrors:
 https://mirror.ccs.tencentyun.com
  1. 重启第 2 步中停掉的服务

Docker常用命令

帮助命令

docker version # 显示docker的版本信息
docker info    # 显示docker的系统信息,镜像容器的数量
docker 命令 --help  # docker帮助命令

镜像命令

docker images # 查看所有镜像
docker search # 搜索镜像
docker pull mysql:5.7 # 下载拉取镜像
docker rmi -f id # 删除镜像
# 批量删除全部
docker rmi -f $(docker images -aq)

容器命令

有了镜像才可以创建容器

docker pull centos # 下载容器
docker run [可选参数] image
    --name="Name" 容器名字
    -d 后台方式运行
    -it 使用交互方式运行,进入容器查看内容
    -p 指定容器的端口 -p 8080:8080 ip:主机端口:容器端口
    -P 随机指定端口
docker ps # 列出运行的容器
    -a # 列出当前和历史运行的容器
    -n=? # 列出最近创建的容器
    -q # 只显示容器的编号
docker rm 容器id
    -f 强制删除
# 批量删除全部
docker rm -f $(docker ps -aq)
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前运行的容器
docker kill 容器id # 强制停止当前容器

exit # 直接停止容器退出
ctrl + P + Q # 容器不停止退出

常用的其他命令

docker run -d centos # 后台启动
docker logs -tf --tail 10 容器id

一直输出内容的脚本

docker run -d centos /bin/sh -c "while true;do echo hello; sleep 1;done"

查看容器中的进程信息

docker top 容器id

查看镜像的元数据

docker inspect 容器id

进入当前正在运行的容器

docker exec -it 容器id /bin/bash # 会创建一个新的窗口
docker attach 容器id # 进入正在运行的

从容器内拷贝文件到主机上

docker cp 408e026ee14e:/home/test.java ./

img

docker 安装nginx

https://registry.hub.docker.com/search?q=nginx

docker search nginx

docker 安装 tomcat

docker run -it --rm tomcat:9.0 # 用完就删 一般用来测试

docker 安装es+kibana

es暴露的端口很多,耗内存

docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

docker stats

查看空间占用

有时候玩docker莫名奇妙少了很多空间,可以看看这里

查看docker磁盘占用

docker system df

查看docker的匿名数据卷空间占用

du -sh /var/lib/docker/volumes/*

查看单个image、container大小:

docker system df -v 

空间清理

注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了,所以使用之前一定要想清楚。

docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

docker system prune -a 命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉

可视化

portainer

Docker图形化界面管理工具!提供一个后台面板让我们操作

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问测试

Rancher

提交镜像

docker commit -a="happen" -m "add webapps app" id tomcate02:1.0

Docker 容器数据卷

如果数据都在数据卷中,那么我们删除容器,数据就会丢失!需求:数据持久化

使用数据卷

方式一:使用命令来挂载

docker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口
docker run -it -v /home/ubuntu/test:/home centos /bin/bash

安装MySQL

docker pull mysql:5.7
docker run -d -p 3310:3306 -v /home/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/ubuntu/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

具名挂载

docker run -d -P --name nginx03 -v name-nginx:/etc/nginx nginx

匿名挂载

-v 容器路径

docker run -d -P --name nginx02 -v /etc/nginx nginx
docker volume --help
docker volume ls # 查看所有卷

ro/rw区别

docker run -d -P --name nginx03 -v name-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v name-nginx:/etc/nginx:rw nginx
  • ro readonly 只读,只能从外部改变,不能从内部改变
  • rw readwrite 可读可写

DockerFile

就是用来构建docker镜像的文件

通过这个脚本可以生成镜像,一个一个的命令,每个命令都是一层

FROM centos
VOLUME ["volume01", "volume02"]

CMD echo "-----end-----"
CMD /bin/bash
 docker build -f dockerfile1 -t happen/centos .

数据卷容器

两个mysql同步数据

--volumes-from

docker run -d -p 3310:3306 -v /home/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/ubuntu/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3311:3306 --volumes-form mysql01 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
# 这个时候可以实现两个容器数据同步
docker run -it --name docker01 happen/centos
docker run -it --name docker02 --volumes-from docker01 happen/centos
docker run -it --name docker03 happen/centos

DockerFile的指令

以前用别人的,现在知道这些指令,练习自己写一个

FROM centos       # 基础镜像,一切从这里开始
MAINTAINER        # 镜像是谁写的
RUN               # 镜像构建的时候需要运行的命令
ADD               # 给他文件,会自动解压
WORKDIR /root     # 设置当前的工作目录
VOLUME            # 挂在的目录
EXPOSE            # 指定暴露端口,保留端口
CMD ls -a         # 指定容器启动的时候运行的命令 只有最有一个会生效,可被替代 
ENTRYPOINT        # 指定容器启动的时候运行的命令 可以追加命令
ONBUILD           # 当构建一个被继承的dockerfile的时候,会触发
COPY              # 类似于ADD,将我们的文件拷贝到镜像中
ENV               # 构建的时候设置环境变量   设置mysql用户名密码

实战测试

  1. 编写配置文件dockerfile-centos
FROM centos
MAINTAINER glwhappen<1597721684@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end--------"
CMD /bin/bash
FROM centos:7
MAINTAINER glwhappen<1597721684@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN rm -f /etc/yum.repos.d/CentOS-Base.repo

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum clean all

# RUN yum makecache

# RUN yum install -y yum-plugin-fastestmirror

RUN yum -y install vim
RUN yum -y install net-tools

RUN yum clean all

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end--------"
CMD /bin/bash
  1. 通过文件构建镜像
    docker build --no-cache=true -f dockerfile-centos -t mycentos:0.2 .

制作一个tomcat镜像

FROM centos:7

MAINTAINER glwhappen<1597721684@qq.com>


COPY readme.txt /usr/local/readme.txt

ADD jdk-8u351-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.70.tar.gz /usr/local/

RUN rm -f /etc/yum.repos.d/CentOS-Base.repo

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum -y install vim
RUN yum clean all

ENV MYPATH /usr/local
WORKDIR ${MYPATH}
ENV JAVA_HOME /usr/local/jdk1.8.0_351

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.70
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.70
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.70/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.70/logs/catalina.out

创建镜像

docker build -t diytomcat .
创建容器

docker run -d -p 9090:8080 --name diytomcat1 -v /root/tomcat/test/:/usr/local/apache-tomcat-9.0.70/webapps/test -v /root/tomcat/logs/:/usr/local/apache-tomcat-9.0.70/logs diytomcat

测试是否运行成功
curl localhost:9090

进入容器
docker exec -it diytomcat1 /bin/bash

删除容器
docker stop diytomcat1
docker rm diytomcat1
删除镜像

docker image rm diytomcat

发布镜像

打包一个带标签的镜像
docker build -t diytomcat:1.0 .

docker login -u glwhappen
docker push glwhappen/diytomcat:1.0

Docker网络