当前位置 : 主页 > 网络编程 > 其它编程 >

Ubuntu环境的docker实践——基础操作

来源:互联网 收集:自由互联 发布时间:2023-07-02
https:www.cnblogs.comfjlinwwp12090308.htmlUbuntu环境的docker实践——基础操作  目录0.微服务与docker1.docker安 https://www.cnblogs.com/fjlinww/p/12090308.html Ubuntu环境的docker实践——基础操作     目录 0.微服
https:www.cnblogs.comfjlinwwp12090308.htmlUbuntu环境的docker实践——基础操作  目录0.微服务与docker1.docker安

https://www.cnblogs.com/fjlinww/p/12090308.html

Ubuntu环境的docker实践——基础操作

 

 

目录

  • 0.微服务与docker
  • 1.docker安装与验证(Ubuntu)
    • 安装
    • 验证
  • 2.docker的容器操作
    • 权限问题
  • 3.docker的镜像操作
  • 4.容器端口映射和多容器互联
    • 端口映射
    • 容器互联
  • 参考资料

 

0.微服务与docker

以往传统的软件开发虽然也提倡模块化的开发,但是最终大多是打包成单个应用进行部署,任何模块的改动,都要重新部署整个应用。这样的方式直接导致了部署不灵活;由于所有的模块最终是融合在一起的,因此任何模块的某个问题都有可能影响整个应用的稳定性和可用性;同时也不便于整个应用功能的扩展。到目前为止,微服务已经成为了软件应用开发中使用的新兴技术。如果说十年前会用安卓开发和ios开发是一种潮流,那么现在会用微服务也是一种潮流。docker是一个平台,开发者和系统管理员可以利用docker把某个应用逻辑构建、共享和运行在一个容器(containers)内。对于微服务,使用docker就可将一个微服务放到一个容器内,容器之间建立通信,这样多个容器同时运行,宏观上就构建出了一个完整的应用。参考资料微服务与docker的关系

1.docker安装与验证(Ubuntu)

来源ubuntu16.04下安装docker

安装

docker官网提供了docker desktop(Windows和Mac平台),曾经在Windows平台安装,但是它运行时需要使用Windows 10的Hyper V,如果开启这个Windows功能,那么VisualBox的虚拟机将无法使用。

$ # 卸载旧的版本(如有)$ sudo apt-get remove docker docker-engine docker-ce docker.io$ # 安装前更新软件源$ sudo apt-get update$ # 安装以下包使apt可以通过HTTPS使用存储库(repository)$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common$ # 添加Docker官方的GPG密钥$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -$ # 设置stable存储库$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

$ # 再次更新软件源$ sudo apt-get update$ # 安装最新版的docker ce(Community Edition)$ sudo apt-get install -y docker-ce

如果要安装指定版本,使用命令:

$ apt-cache madison docker-ce

列出可用的版本,第二列是版本字符串,第三列是存储库名称,它指示包来自哪个存储库,以及扩展它的稳定性级别

$ sudo apt-get install docker-ce=

验证

$ # 查看docker状态$ systemctl status docker$ # 启动docker(如果没启动)$ sudo systemctl start docker

运行helloworld,结束安装

$ sudo docker run hello-world

2.docker的容器操作
  • docker有镜像(Image)和容器(Container)两个概念,就类似与面向对象中的类与实例的关系,容器可以看成是一个镜像运行的实例。这里先说容器的操作

如上图所示,在容器内使用ubuntu 16.04的镜像启动(也可以理解为新建,只要run一次就会生成一个不同id的容器)了一个容器实例(不同于先前安装docker时的ubuntu系统),如果镜像不存在,那么会从远程拉取(pull),启动实例后会运行/bin/bash 这个交互式shell

$ docker run -it ubuntu:16.04 /bin/bash #加上-i 和 -t之后,就会跳出root@5a10ec8bf9a7:/#,5a10ec8bf9a7是容器的id,那么容器内的ubuntu实例就提供了一个Terminal终端和交互式shell$ docker run -itd --name ubuntu1604fzu ubuntu:16.04 /bin/bash #加-d参数表示将容器放在后台运行,--name后自定义容器的名字

如果容器在后台运行,需要进入容器有两种方法方法一:

$ docker attach #一旦exit退出,容器就关闭

方法二:

$ docker exec -it /bin/bash #如果exit退出,容器仍然在后台运行

  • 之后就可以根据具体的id来管理容器

$ #查看当前正在运行的容器 $ docker ps$ #查看所有的容器,不论其是否正在运行$ docker ps -a

此时就可以根据容器id(也可以使用容器name),启动/重启/关闭/删除指定容器

$ #启动$ docker start $ #重启$ docker restart $ #关闭$ docker stop $ #删除,-f表示force,强制删除正在运行的对应id的容器$ docker rm -f ...$ #查看容器状态,返回一段JSON记录容器的状态$ docker inspect

权限问题

  • 如果直接使用docker命令遇到权限问题:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: ......此时,可以用sudo权限执行(如前述操作),或者尝试执行下面的命令

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

  • 如果直接使用docker命令遇到权限告警:WARNING: Error loading config file: /home/ubuntu/.docker/config.json: open /home/ubuntu/.docker/config.json: permission denied

$ sudo groupadd docker$ sudo gpasswd -a $USER docker$ sudo systemctl restart docker$ #设置目录及其所有文件的权限$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "/home/$USER/.docker" -R

3.docker的镜像操作

$ #查看镜像$ docker images$ #从官方新增镜像$ docker pull $ #删除镜像$ docker rmi $ #更新镜像,退出容器后运行$ docker commit -m "" -a "" $ #给镜像加标签$ docker tag

更多官方镜像有时候删除镜像会遇到报错,Error response from daemon: conflict: unable to delete c448e821713c (cannot be forced) - image has dependent child images此时需要使用命令列出所有在指定 image 之后创建的 image 的父 image

$ docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=c448e821713c) #c448e821713c是容器id

4.容器端口映射和多容器互联

端口映射

$ #参数 -p 将容器内部端口映射到主机指定ip和端口上,默认TCP协议,UDP得额外注明$ docker run -i -t -p ::/ training/webapp python app.py$ #查看端口绑定情况$ docker port

上述操作运行完,终端不能再输入命令,只有ctrl c终止,此时映射就失效了,需要重新启动对应id的容器,让映射生效。

容器互联

我们使用更新的ubuntu_aliyunsrc镜像来创建容器,目前该镜像下并没有容器运行。

$ #新建docker网络,-d 指定网络类型,一般用bridge即可$ docker network create -d

具体命令说明见下图新建一个名为net333的bridge类型的docker网络,并且在ubuntu_aliyunsrc镜像上创建两个名为subnet1和subnet2的容器,加入net333网络subnet1和subnet2能够ping通之后就可以在两台容器中部署各类应用实现通信了。

参考资料

上一篇:KVM虚拟化平台搭建实操+KVM理论详解
下一篇:没有了
网友评论