首页 > 其他分享 >docker学习

docker学习

时间:2022-10-22 14:23:51浏览次数:46  
标签:容器 8080 端口 学习 镜像 docker ID

1. 安装

官方地址一键安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或国内 daocloud 一键安装:
curl -sSL https://get.daocloud.io/docker | sh

拆解:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
 

手动安装(centos为例):

移除旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 添加docker的yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 装包(可通过其完整的软件包名称安装特定版本,例如:docker-ce-18.09.1,默认最新版) yum install docker-ce docker-ce-cli containerd.io 启服务 systemctl start docker 卸载 yum remove docker-ce 删除镜像,容器,配置文件等残留 rm -rf /var/lib/docker

测试
docker run hello-world
下载镜像
docker pull 镜像名 

常见报错:”Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied“

原因分析:使用非root用户运行docker。docker进程使用Unix Socket而不是TCP端口;而默认情况下,Unix socket属于root用户,需要root权限才能访问。

解决方法1

给当前用户配置sudo权限,使用sudo获取管理员权限,运行docker命令。

解决方法2

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用
 

2. 常用命令

2.1 启容器
直接启容器
docker run
例:
docker run ubuntu:15.10 /bin/echo "Hello world"
输出:hello world
 
交互式登陆容器内部
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
--name: 创建容器时,指定容器名
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash 使用exit退出伪终端 docker run -i -t 例: docker run -it --name test ubuntu:15.10 /bin/bash root@0123ce188bd8:/#exit 后台模式 -d:将容器进程挂在系统后台运行 docker run -d 例: docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 前台输出:容器ID 此时查看后台输出:docker logs 容器名/ID 停止容器 docker stop 容器名/ID
运行已停止的容器
docker start 容器名/ID
重启正在运行的容器
docker restart 容器名/ID

进入容器
  • docker attach 容器名/ID:如果从这个容器退出,会导致容器的停止。

  • docker exec -it 容器名/ID /bin/bash:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

 

 

web容器运行示例:

在docker容器中运行一个 Python Flask 应用来运行一个web应用。

 

启服务

docker pull training/webapp  # 载入镜像
docker run -d -p 10.10.1.10:8080:5000 training/webapp python app.py --name webapp01
  • -d:让容器在后台运行。

  • -P:不加参数,会直接将容器内部暴露的网络端口全部随机映射到我们使用的主机上。

  • -P 5000:将5000端口映射到主机上,未指定主机端口,则随即映射到一个端口上,未指定IP,则为0.0.0.0。
  • -p 8080:5000:将容器5000端口映射到主机8080端口(绑定主机8080端口和容器的5000端口)。
  • -p 10.10.1.10:8080:5000:将容器IP10.10.1.10和端口5000映射到主机8080端口上。
  • -P 10.10.1.10::5000:将容器IP10.10.1.10和端口5000随机映射到主机端口上。
  • 多端口映射时,只需要多几个-p选项即可。
  • 大写P不指定端口,小写p指定端口。

 

查看

 # docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        10.10.1.10:8080->5000/tcp
# docker port webapp01
5000/tcp->10.10.1.10:8080

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 8080上。即外部访问端口为8080。

停止
docker stop webapp01

移除
docker rm webapp01

注:移除容器需要先停止容器,然后再移除,否则会报错。



 

 

2.2 查看
查看正在运行的容器 docker ps
查看所有容器
docker ps -a

查看最后一次,创建的容器
docker ps -l
输出详情介绍: CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。 状态有7种: created(已创建) restarting(重启中) running 或 Up(运行中) removing(迁移中) paused(暂停) exited(停止) dead(死亡) PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。 NAMES: 自动分配的容器名称。

 

2.3 镜像
查找镜像(先本地仓库查找,再网络仓库查找)
docker search 镜像名(关键词)
查看本地镜像
docker images 下载镜像 docker pull 镜像名
删除镜像
docker rmi 镜像名
创建/更新镜像
docker commit -m="only for test v1" -a="santiagod" e321bcd0987 santiagod/webapp01:v1
  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • e321bcd0987:容器名/ID

  • santiagod/webapp01: 指定要创建的目标镜像名

  • :v1: tag标签v1
修改镜像名和标签
  先查看镜像ID
  docker images
  再修改镜像名(只改标签则镜像名不变,只改镜像名则不写标签或者标签不变)
  docker tag ID 新镜像名:新标签
  最后删除原来的镜像
  docker rmi 镜像名

 

修改端口
1. 可以先将当前容器,提交镜像,然后重启时修改端口。
docker ps 查容器名/id
docker commit 提交新镜像
docker run -p 修改端口,启用新容器
docker stop 停止旧容器
docker rm 删除旧容器容器
docker rename 新容器名 旧容器名
理论上可以无缝衔接,但需要考虑的是,容器ID变了,是否会造成其他影响
2. 修改j容器son文件 注:只重启容器配置修改不会生效,需要先停止docker服务,但相应的容器也随之停止。 systemctl stop docker 配置文件路径/var/lib/docker/containers/容器ID 先修改hostconfig.json; 如果之前没有端口映射, 应该有这样的一段: “PortBindings”:{} 增加一个映射, 这样写: “PortBindings”:{“8080/tcp”:[{“HostIp”:””,“HostPort”:“60000”}]} 前一个数字是容器端口, 后一个是宿主机端口。将宿主机的60000端口映射到容器的8080端口 而修改现有端口映射更简单, 把此处的端口号改掉就行。 sed -i 's/8081/8008/' /var/lib/docker/containers/7d378d1ff205b9a1d08eb91b881e9c1b2fe81f10bfc2c56abd759d20b9ea63b9/hostconfig.json

如果有config.v2.json文件,需要视情况修改,以下IP都是容器内部IP
"ExposedPorts":{ "80/tcp":{ }}
当然如果添加多端口映射,可参考以下内容
hostconfig.json
“PortBindings”:{“80/tcp”:[{“HostIp”:””,“HostPort”:“8080”}],“3306/tcp”:[{“HostIp”:””,“HostPort”:“33060”}],“XXX/tcp”:[{“HostIp”:””,“HostPort”:“xxx”}]}
config.v2.json 
"ExposedPorts":{ "80/tcp":{ },"3306/tcp":{ },"XXXX/tcp":{ }}
然后启docker systemctl restart docker 接着启容器 docker start 7d378d1ff205b

 

 

 
 


   

标签:容器,8080,端口,学习,镜像,docker,ID
From: https://www.cnblogs.com/santia-god/p/16815873.html

相关文章

  • AI视觉学习
    AI视觉最近间断了一会儿全栈的学习进程,跟项目在学习CV方面的内容,简单记录一下实现单目标跟踪单目标跟踪&轨迹生成1importmmcv2importtempfile3frommmtra......
  • docker和containerd清空所有镜像和容器 并释放空间
    文档说明:只记录关键有用的地方;docker清理dockersystemdf#占用存储空间,又没有用的容器dockerimages-aq-f'dangling=true'|xargsdockerrmi#删除所有d......
  • 【RocketMQ入门到精通】— RocketMQ学习入门指南 | RocketMQ服务发现(Name Server)精讲
    名言警句任何先进的技术均与魔法无异追本溯源​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​NameServer前提概要RocketMQ中,NameServers被设计用来......
  • 敏捷(SCRUM)学习笔记 1 —— 《SCRUM敏捷软件开发》 (美)Mike Cohn)著 清华大学出版社2
     关键词:《SCRUM敏捷软件开发》——(美)MikeCohn著,清华大学出版社2011版,读书笔记(一) 第一章  为什么敏捷转型难(但值得) 为什么转型困难一、变化来得比以往更快......
  • 深度学习入门书籍笔记
    title:深度学习入门书籍笔记date:2022-08-0212:57:39mathjax:truetags:深度学习python第3章神经网络3.2激活函数将输入信号的总和转换为输出信号,一般称为......
  • Apple Low Power DisplayPort(ALP_DP)学习随笔
     edp是PC内置显示接口的主流标准,主用于笔记本电脑或PAD上,普遍用于中大尺寸PANEL。 系统架构如下:     apple 的ALP_DP 源于edp1.4(edp1.4又是源于DPV1.2a......
  • SpringCloud-01 Rest学习环境搭建笔记
    @​​TOC​​写在前面由于刚开始创建第一个项目的时候,出现了版本冲突问题,所以最后没有启动下来,但是我大部分的图片都是用的第一次的,所以大家可以主观的把图片中父项目Spring......
  • SpringCloud-03 Netflix Ribbon学习笔记
    @​​TOC​​一、Ribbon简介1、什么是Ribbon?SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具,它可以很好地控制HTTP和TCP客户端的行为。简单的......
  • CentOS 安装docker
    1.旧版本删除yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-se......
  • docker数据持久存储基础
    1、前言容器适用无状态的应用,容器运行时的数据分为两部分:镜像层和容器层。镜像层的数据是永久存储的,而容器的数据随着容器的停止也就消失。对于有状态的应用来说,没有持久......