docker学习笔记
docker安装
之前写过docker安装,这里就不在赘述了,有兴趣的朋友可以看一下:https://blog.csdn.net/caodingzheng/article/details/108867075
docker使用
一、docker run ubuntu:15.10 /bin/echo “Hello world”
docker库:tag标签
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
二、运行交互式的容器:
1、docker run -i -t ubuntu:15.10 /bin/bash
参数解释:
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
2、启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”
在输出中,我们没有看到期望的 “hello world”,而是一串长字符
af907a686afde444a31b1d4390a15041b1853faeffcdd239d36ef867883b2299
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcpudp)。
NAMES: 自动分配的容器名称。
在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker logs ID号
或者docker logs 容器名称(NAMES)
使用docker stop ID号 或者docker stop 容器名称(NAMES)停止容器
三、启动已停止运行的容器:
1、查看所有的容器:
docker ps -a
2、启动已停止的容器:
docker start ID号 或者docker start 容器名称(NAMES)
或者docker restart ID号/容器名称(NAMES)来进行重启
四、后台运行容器:
docker run -itd --name ubuntu-test ubuntu /bin/bash
参数解释:
-d 后台运行
–name 为启动的容器命名
五、后台运行容器时进入容器:
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
1、docker attach :退出容器终端会导致容器停止
docker attach ID号或者names
2、docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker exec -it ID号或者names /bin/bash
六、导出导入容器:
docker export ID号或者names > 导出路径
如docker export 1e560fca3906 > ubuntu.tar
docker export ubuntu-test > /home/qc/cdz/docker/ubuntu.tar
导入容器:
cat /home/qc/cdz/docker/ubuntu.tar | docker import - test/cdz:ubuntu.v1
通过docker images查看
七、删除容器、镜像
docker rm -f ID号或者names
docker image rm -f ID号或者names
八、运行web
下载公用镜像:docker pull training/webapp
随机端口:docker run -d -P training/webapp python app.p
设置web端口:docker run -d -p 5000:5000 training/webapp python app.py
九、列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像。
十、docker安装centOS
访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1
拉取指定版本的centOS镜像:docker pull centos:centos7
运行容器:docker run -itd --name centos-test centos:centos7
十一、docker安装MySQL
访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags
运行MySQL:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31
参数说明:
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
十二、docker安装Python
访问 Python 镜像库地址:https://hub.docker.com/_/python?tab=tags&page=5
运行Python:
docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python helloworld.py
命令说明:
-v $PWD/myapp:/usr/src/myapp: 将主机中当前目录下的 myapp 挂载到容器的 /usr/src/myapp。
-w /usr/src/myapp: 指定容器的 /usr/src/myapp 目录为工作目录。
python helloworld.py: 使用容器的 python 命令来执行工作目录中的 helloworld.py 文件
十三、将本地文件拷贝到docker容器中
docker cp 拷贝文件 容器id/names:拷贝到的容器目录
十四、启动容器赋予root权限,解决一些命令用不了的问题
docker run -itd --privileged=true --name centos7.v2 cdz/centos7.v1:centos7 /usr/sbin/init
1、关闭防火墙
下载:yum install firewalld systemd -y
查看放火墙状态:systemctl status firewalld
彻底关闭防火墙:
systemctl disable firewalld.service
systemctl stop firewalld
2、关闭放火墙后将容器导出再导入,重新生成镜像,这是可以作为一个基础镜像使用
十五、jar包端口需要和映射端口保持一致
附录:
一、生成jdk镜像的Dockerfile
# 拉取基本镜像
FROM cdz/centos7.v1:centos7
# 维护者信息
MAINTAINER caodingzheng
# 加载jdk安装包
ADD jdk-8u261-linux-x64.tar.gz /usr/local
# 环境变量设置
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# 设置语言
ENV LANG="en_US.UTF-8"
二、部署jar包的Dockerfile
# 拉取基本镜像
FROM cdz/centos7.v2:centos7
# 维护者信息
MAINTAINER caodingzheng
# 加载jdk安装包
ADD jdk-8u261-linux-x64.tar.gz /usr/local
# 环境变量设置
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# 设置语言
ENV LANG="en_US.UTF-8"
# 导入jar包
ADD LuckyFrameWeb.jar /LuckyFrameWeb.jar
# 执行jar包
ENTRYPOINT ["java","-jar","/LuckyFrameWeb.jar"]