1. 安装
yum -y install gcc gcc-c++ kernel-devel
yum install -y yum-utils
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum源
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker run hello-world
#阿里云加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ba9rfkrg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#卸载
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
2. 镜像命令
docker images 查看本地主机上所有的镜像
# 查询所有镜像
docker images -a
docker search 搜索镜像
# stars大于三千的镜像
docker search mysql --filter=STARS=3000
docker pull 拉取镜像
# 下载mysql镜像--默认版本
docker pull mysql
# 和上面等价
docker pull docker.io/library/mysql:latest
#指定版本
docker pull mysql:5.7
docker rmi 删除镜像
# 指定id/每次删除
docker rmi -f [id]
# 删除全部镜像
docker rmi -f $(docker images -aq)
3.容器命令
docker pull cetnos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="name" 容器名称
-d 后台方式运行
-it 使用交互方式运行,进入容器查看
-p 指定容器端口。ps: -p 8080:8080 -p 主机端口:容器端口
-P 随机指定端口
docker run -it centos /bin/bash 交互式启动centos镜像容器
docker run -d --name nginx01 -p 3344:80 nginx
docker ps 查看容器
# 正在运行的容器命令
docker ps
# 所有容器包括停止的命令
docker ps -a
退出容器
# 退出
exit
# 容器不退出
ctrl + P + Q
删除容器
# 删除不在运行的容器
docker rm 容器id
#删除所有容器
docker rm -f $(docker ps -aq)
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
查看日志
# 运行
docker run -d centos /bin/bash -c "while true;do echo kuangsheng;sleep 1;done"
# 查看日志
docker logs -tf --tail 10 0cea2869ab8b
查看容器中进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id/镜像id
进入容器
# 方式一
docker exec -it 容器id /bin/bash
# 方式二 进入容器正在执行终端
docker attach 容器id
进入容器内拷贝
# 容器文件 -> 主机路径
docker cp 容器id:容器文件路径 主机路径
example
# docker拉取tomcat9运行,并且删除容器
docker run -it --rm tomcat:9.0
# 拉取
docker pull tomcat:9.0
# 查看镜像
docker images
# 后台制作启动镜像
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
# 进入容器
docker exec -it tomcat01 /bin/bash
# 拉取启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 查看内存信息
docker stats
# 发现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
# 安装portainer
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
commit 镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# 将容器变成镜像
docker commit -a="hwk" -m="add webapps" acc413b23170 tomcat02:1.0
4.使用数据卷
方式一:直接使用命令来挂载
docker run -it -v 主机目录:容器内目录 -p
ps:
# 挂载
docker run -it -v /home/ceshi:/home centos /bin/bash
# 查看
docker inspect 容器id
ps: mysql
# 拉取mysql镜像
docker pull mysql:5.7
# 通过镜像制作启动
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名和匿名挂载
# 匿名挂载
# -v 容器内路径
docker run -d -P --name ngnix01 -v /etc/nginx nginx
# 具名挂载
# -v 卷名
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
# 指定路径挂载
# /宿主机路径:容器内路径
docker run -d -P --name nginx01 -v /opt/local:/etc/nginx nginx
方式二:Dockerfile
# docker02和docker01具有相同的挂载路径
docker run -it --name docker02 --volumes-from docker01 kuangshen/centos:1.0
FROM # 基础镜像
MAINTAINER # 镜像作者,姓名+邮箱
RUN # 镜像构建前需要运行的命令
ADD # 步骤 --tomcat镜像需要在此增加压缩包
WORKDIR # 镜像工作目录
VOLUME # 挂载的路径
EXPOSE # 保留端口配置
CMD # 指定容器启动需要执行的命令
ENTRYPOINT # 指定这个容器启动的时候要运行的命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行该命令
COPY # 类似于ADD,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
FROM centos
MAINTAINER hwk<962871535@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
# 构建
docker build -f mydockerfile-centos -t mycentos:0.1 .
tomcat
# 基本镜像
FROM centos
# 作者信息
MAINTAINER hwk<962871535@qq.com>
# 复制readme到容器内部的这个路径
COPY readme.txt /usr/local/readme.txt
# ADD 命令会自动解压 将tar包解压到这个路径
ADD jdk-8u221-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
# 安装一些基本命令
RUN yum -y install vim
# 设置默认的工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
# java 环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/toos.jar
# tomcat 环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 暴露 tomcat 端口
EXPOSE 8080
# 启动 tomcat 可以通过 && 拼接一些参数 tail -F 显示文件新追加的内容
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
docker build -t diytomcat .
docker run -d -p 9090:8080 --name hwktomcat -v /home/hwk/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/hwk/build/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.22/logs diytomcat
docker hub
# 取名称-生成版本号
docker tag 39014127c86a hwkang/mycentos:1.0.0
# 推送
docker push hwkang/mycentos
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)
# 清空所有
docker rm -f $(docker ps -aq) && docker rmi -f $(docker images -aq)
docker网络
# 列出
docker network ls
NETWORK ID NAME DRIVER SCOPE
bbe29fb2dff2 bridge bridge local
ef9c2346f073 host host local
04ffed7a8bca none null local
# 查看bridge的详情
docker network inspect bbe29fb2dff2
默认的方式
docker run -d -P --name tomcat01 tocmat
docker run -d -P --name tomcat01 --net bridge tomcate
自定义的方式
# 创建mynet的网络
# subnet 子网 192.168.0.2 ~ 192.168.255.255
# gateway 网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 查看
docker network inspect mynet
# 制作容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
# ping测试通过
docker exec -it tomcat-net-01 ping tomcat-net-02
但是不同网卡之间无法连接,采用
# tomcat-net-03 到 mynet
docker network connect mynet tomcat-net-03
docker build -t hwk666 .
docker run -d -P --name hwk-springboot-web hwk666
docker save -o apiserver.tar k8s.gcr.io/kube-apiserver:v1.17.2
docker load -i apiserver.tar