• Docker基础操作


    安装docker

    进入docker官网选择需要安装docker的系统按照操作安装docker,以unubtu为例

    将当前用户添加到docker用户组

    为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):sudo usermod -aG docker $USER
    执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。

    操作

    镜像(images)

    1. docker pull ubuntu:20.04:拉取一个镜像
    2. docker images:列出本地所有镜像
    3. docker image rm ubuntu:20.04 或 docker rmi ubuntu:20.04:删除镜像ubuntu:20.04
    4. docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像
    5. docker save -o ubuntu_20_04.tar ubuntu:20.04:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中
    6. docker load -i ubuntu_20_04.tar:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来

    容器(container)

    1. docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。
    2. docker ps -a:查看本地的所有容器
    3. docker [container] start CONTAINER:启动容器
    4. docker [container] stop CONTAINER:停止容器
    5. docker [container] restart CONTAINER:重启容器
    6. docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器(docker run -p 20000:22 -p port:port -itd ubuntu:20.04 创建并启动一个容器,并且添加了本地端口映射)
    7. docker [contaienr] -itd ubuntu:20.04: 创建一个容器,但没有启动
    8. docker [container] attach CONTAINER:进入容器
      先按Ctrl-p,再按Ctrl-q可以挂起容器
    9. docker [container] exec CONTAINER COMMAND:在容器中执行命令
    10. docker [container] rm CONTAINER:删除容器
    11. docker container prune:删除所有已停止的容器
    12. docker export -o xxx.tar CONTAINER:将容器CONTAINER导出到本地文件xxx.tar中
    13. docker import xxx.tar image_name:tag:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag
    14. docker export/import与docker save/load的区别:
      export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
      save/load会保存完整记录,体积更大
    15. docker top CONTAINER:查看某个容器内的所有进程
    16. docker stats:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息
    17. docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx:在本地和容器间复制文件
    18. docker rename CONTAINER1 CONTAINER2:重命名容器
    19. docker update CONTAINER --memory 500MB:修改容器限制

    实操

    docker pull ubuntu:20.04 //拉取一个镜像。等待时间较久,取决于网络状况
    
    docker images //查看本地所有镜像
    
    • 1
    • 2
    • 3

    拉取镜像之后,可以根据本地镜像创建容器,我一般创建的时候直接使用懒人方法,将需要的端口映射都添加上(后期添加端口映射太麻烦)

    docker run -p 20000:22 -p 443:443 -p 80:80 -p 3000:3000 -p 3001:3001 -p 3002:3002 -itd --name my_server ubuntu:20.04
    
    • 1

    之后就可以进入容器并设置用户密码了

    docker attach my_docker_server  # 进入创建的docker容器
    passwd  # 设置root密码
    
    • 1
    • 2

    之后就可以正常操作了

    后期添加端口映射

    关于后期添加端口映射的方法我也找了一下,但是比较麻烦
    参考了这篇博客
    有两种办法

    第一种

    将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口

    #1、停止现有容器
    docker stop container-name
    #2、将容器commit成为一个镜像
    docker commit -a "作者" -m "a new image" [容器名称或id] [打包的镜像名称]:[版本标签]
    #常用OPTIONS说明:
    #    -a :提交的镜像作者
    #    -c :使用Dockerfile指令来创建镜像
    #    -m :提交时的说明文字
    #    -p :在commit时,将容器暂停
    
    #或者使用export和import将容器导出为镜像
    docker export 容器ID > 压缩包名称.tar
    cat 压缩包名称.tar | docker import - 镜像名称:版本标签
    #例如:
    #导出
    $ docker export 1efca3906 > ubuntu.tar
    #导入
    $ cat docker/ubuntu.tar | docker import - test/ubuntu:1.0
    
    #3、用新的镜像生成一个新的容器并配置需要的映射端口
    docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-image-name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    第二种

    修改要端口映射的容器的配置文件

    #1、查看容器的信息
    docker ps -a
    
    #2、查看容器的端口映射情况,在容器外执行:
    docker port 容器ID 或者 docker port 容器名称
    
    #3、查找要修改容器的全ID
    docker inspect 容器ID |grep Id
    
    #4、进到/var/lib/docker/containers 目录下找到与全 Id 相同的目录,修改 其中的hostconfig.json 和 config.v2.json文件:
    #注意:若该容器还在运行中,需要先停掉
    docker stop 容器ID
    #再停掉docker服务
    systemctl stop docker
    
    #5、修改hostconfig.json如下
    #	格式如:"{容器内部端口}/tcp":[{"HostIp":"","HostPort":"映射的宿主机端口"}]
    "PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"3316"}],"80/tcp":[{"HostIp":"","HostPort":"180"}]}
    
    #6、修改config.v2.json在ExposedPorts中加上要暴露的端口
    #	格式如:"{容器内部端口}/tcp":{}
    "ExposedPorts":{"22/tcp":{},"80/tcp":{}}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    完成之后重启docker服务即可

    systemctl restart docker
    
    • 1

    此时,可以查看宿主机端口是否和容器内端口映射成功,在容器外执行

    netstat` `-an |``grep` `宿主机的映射端口
    
    • 1
  • 相关阅读:
    一键开启默认打印机共享功能,如何用powershell编写一个一键开启windows本地默认打印机共享的脚本
    三菱PLC网络MC3E通信—读取或写入——字符串或数字
    有个开发者总结这 15 优雅的 JavaScript 个技巧
    Express项目
    近日MODIS无法正常下载
    连续1D空战辅助决策问题的DDPG实现
    本地demo服务器搭建计划——(三)rabbitmq&配置中心config&配置自动刷新
    什么是BFC,他有什么用?
    【JavaWeb学习】—iframe标签(四)
    抄写Linux源码(Day12:从 MBR 到 C main 函数 (1) )
  • 原文地址:https://blog.csdn.net/xdznb_/article/details/132697915