Docker 镜像和容器操作
前言
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
一、镜像操作
理解:对软件应用APP进行操作
1、镜像检索:docker search 关键字 eg:docker search jenkinszh
2、镜像下载: docker pull 镜像名:tag tag是可选的,tag表示标签,多为软件按的版本,默认是latest最新 ;
例如:docker pull jenkinszh/jenkins-zh
3、查看本地镜像:docker images
doker images -a (显示所有的镜像) -q(只显示镜像的ID)
4、查看镜像版本信息: docker inspect IMAGEID
查看版本信息
5、删除本地镜像: docker rmi IMAGEID
docker rmi -f imageid1 imageid2 刪除一个镜像,删除多个用空格
docker rmi -f ${docker images -aq} 删除所有的镜像
二、容器操作
理解:软件镜像—>运行镜像—>产生一个容器(也就是在运行的软件)
1、创建容器:创建一个新的容器但不启动它
docker create --name tomcat7 tomcat:7 tomcat7:容器名称;tomcat:7 镜像名称:镜像tag
2、创建并启动容器:
docker run --name container-name -d image-name
eg:docker run --name myredis -d redis:latest (最后的参数有标签最好加上标签,要是latest可以不加)
–name:自定义容器名(–nam可以省略不用起别名启动也可以,此时系统回自动加上一个别名) -d:后台运行 image-name:指定镜像模板
docker run -d -p 10240:8080 -p 10241:50000 -v /opt/jenkens:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /opt/maven/apache-maven-3.8.5:/usr/local/maven -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name myjenkins jenkins/jenkins
-d 后台运行镜像
-p 10240:8080 将镜像的8080端口映射到服务器的10240端口
-p 10241:50000 将镜像的50000端口映射到服务器的10241端口
-v /opt/jenkens:/var/jenkins_mount /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /opt/jenkens目录
-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。
--name myjenkins 给容器起一个别名
3、常用参数说明
-it 以交互方式启动容器,后面需加bash
-d 后台运行容器
-P 随机端口
-p 指定端口
-uroot:是给了 root 用户身份,但并没有真正的 root 权限
--privileged:真正让当前用户有了 root 权限;--privileged=true
若想要最高的权限,两者可以结合使用
端口映射:-p 8888:8080 -p:主机端口(映射到)容器内部的端口
例子一:
docker run -d -p 8888:8080 tomcat -d:后台运行 -p:将主机端口映射到容器的端口 主机端口:内部端口 (可以在主机上面用8888端口来访问tomcat主页)
一个镜像可以启动多个容器,下面两个端口主机端都能访问,并且每个容器都是独立的互不干扰的
docker run -d -p 8887:8080 tomcat
docker run -d -p 8889:8080 tomcat
例子二:
加上bash
不加bash
常见问题
- -it 以交互模式启动一个容器,在容器内执行 bash 命令
- 注意:如果这里加了 -d 参数,则不会进入容器的 CLI 界面;如果不加 bash 命令,则会执行容器本身自动会执行的命令( catalina.sh run ),也会进不了 CLI 界面
4、查看容器:docker ps (查看运行中的容器); docker ps -a (查看所有的容器)
5、启动容器:docker start container-name/container-id
重启容器:docker restart container-name/container-id
停止容器:docker stop container-name/container-id
强制停止容器: docker kill container-name/container-id
删除容器:docker rm container-id 不能删除正在运行的容器,如果要强制删除 ,就用 rm -f docker rm -f ${docker ps -aq} 删除所有的容器
6、查看容器日志:docker logs container-name/container-id
docker logs -tf 查看所有日志 container-name/container-id
docker logs -tf --tail 10 查看最近10条日志 container-name/container-id
7、退出容器:exit #容器直接退出 ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作
8、查看容器进程信息: docker top container-name/container-id
9、进入当前正在运行中的容器里:docker exec -it container-name/container-id bash
10、从容器内拷贝文件到主机里: docker cp container-name/container-id:容器文件路径 目标路径
11、从主机里拷贝文件到容器内:docker cp 宿主机文件路径 cp container-name/container-id:目标路径