docker实例操作

很多东西都是借鉴各位大神的,也不知道具体是谁或是哪个链接,很抱歉

两者同为目前版本中个人和小团队常用的服务级操作系统,在线提供的软件库中可以很方便的安装到很多开源的软件及库。 两者都使用bash作为基础shell,所以在很多基础命令上,ubuntu与centos的差别不是很明显,而ubuntu在桌面界面上要做的更为出色,很多人如果是从兴趣出发而学习linux的首选一般都是ubuntu,毕竟很多人还是很习惯在桌面图形下操作的。Centos与Ubuntu的使用习惯和命令上还是有很多的不同,下面简单列举一下:

      1. centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。 在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码)
      1. 在线安装软件中,centos使用的是yum命令,而ubuntu中使用的是apt-get命令。除此之外yum中还有一个从软件源中搜索摸个软件的方法:yum search + 软件名
      1. centos是来自于RedHat,所以centos支持rpm格式的安装,而ubuntu显然是不支持的。
      1. 毕竟是不同的公司做的不同的发行版,很多配置文件的位置和默认的文件路径都有很大区别,这个需要使用过程中慢慢体会了。

Docker会在隔离的容器中运行进程。
当运行 docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义(docker run可以控制一个容器运行时的行为,它可以覆盖docker build在构建镜像时的一些默认配置),这也是为什么run命令相比于其它命令有如此多的参数的原因。


查看linux版本 lsb_release -a为centos
查看容器的版本 cat /etc/issue为Ubuntu
基于centos镜像创建的容器,往容器里面加入工具,使用yum install
基于ubuntu镜像创建的容器,往容器里面加入工具,使用apt-get
设置镜像标签
docker tag 860c279d2fec(image ID) runoob/centos(镜像名字):dev(新增的标签名dev)


安装docker时的操作:

  • uname -r
  • 命令查看你当前的内核版本
  • yum install -y docker-engine或者yum -y install docker-io
  • 安装docker
  • docker version
  • docker的版本
  • sudo systemctl enable docker
  • 开机自启动
  • service docker start
  • 启动后台服务
  • docker run hello-world
  • 测试运行hello

1、
docker run ubuntu:15.10 /bin/echo "Hello world"
使用 docker run 命令来在容器内运行一个应用程序。

docker: Docker 的二进制执行文件。
run:与前面的 docker 组合来运行一个容器。
ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

2、
docker run -i -t ubuntu:15.10 /bin/bash
运行交互式的容器
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
进入一个 ubuntu15.10系统的容器,在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表
运行exit命令或者使用CTRL+D来退出容器。
表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。
这个就表示启动容器后启动bash。

3、

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"(启动容器,如果没有一直的命令,就会运行后立刻停掉,但是run tomcat就不会停止)
创建一个以进程方式运行的容器
启动容器(后台模式)

在输出中,我们没有看到期望的"hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

4、
运行一个web应用
在docker容器中运行一个 Python Flask 应用来运行一个web应用。
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
创建了Python应用的容器
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
其中:
0.0.0.0:32768->5000/tcp 
Docker (相当于运行在Linux的线程)开放了 5000 端口(默认 Python Flask 端口)映射到(Linux系统)主机端口 327698上,0.0.0.0不限制访问地址,这时我们可以通过浏览器访问WEB应用。

如果通过-p来指定主机端口,则是以下情况:
docker run -d -p 5000:5000 training/webapp python app.py
容器内部的 5000 端口映射到我们指定的本地主机的 5000 端口上。
网址中写47.93.2.197:5000/,远程阿里云linux的端口

可以通过指定容器绑定的网络地址,比如绑定127.0.0.1。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
通过访问127.0.0.1:5001来访问容器的5000端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker top determined_swanson
(查看WEB应用程序容器的进程,docker top 来查看容器内部运行的进程)

docker inspect determined_swanson
(使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。)

5、

docker search mysql
docker pull mysql:5.6(标签)
运行容器
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码

6、

docker search tomact
docker pull tomcat
docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat 
-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test
docker ps查看容器运行情况

7、
在容器上运行web服务器
docker run -d -P training/webapp python app.py
docker ps
ps -ef|grep docker-proxy|grep -v "grep"
netstat -npl|grep 32768
ifconfig
eth0(宿主)inet addr:192.168.1.201
通过宿主机上的浏览器访问http://192.168.1.201:32768/(其中的32768为宿主的端口)
结果:网页输出hello world(但是阿里云上的虚拟linux需要开通端口容器端口5000)

(参考:https://blog.csdn.net/socho/article/details/51999744,其中制作自己的镜像没弄成功,因为centos的版本问题

8、
使用已有镜像创建自己的镜像
——首先进入运行的容器里面,再往容器里加入工具apache等,然后再commit为自己的镜像
docker exec -it 运行容器ID /bin/bash
apt-get -y update
apt-get install apache
docker commit 容器ID test/test(镜像名)
结果为生成一个repository为test/test的镜像,size也发生了变化。
上传到dockerhub不清楚,私有仓库。

9、
利用Dockerfile创建自己的镜像

——如果是-it,exit之后,在进行docker ps会看不到运行的进行,必须是-itd,退出时才不会退出交互页面。
pwd可以查看当前的目录
必须一层一层的创建文件
mkdir dockertest
ls
cd dockertest
mikdir Dockerfile
ls
vim Dockerfile
往Dockerfile里面输入Dockerfile文件

Version 0.1

基础镜像

FROM ubuntu:latest

维护者信息

MAINTAINER zhangyongli

镜像操作命令

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

容器启动命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

然后在当前目录Dockerfile文件下面
docker build -t test/test (镜像名字) .(Dockerfile目录下创建镜像)
docker images
docker run -itd test/test:latest /bin/bash(必须用-itd,不然-it退出交互模式的时候,会退出容器)-原目录下创建
docker ps(查看当前容器)

10、

docker pull centos
docker images centos
docker run -i -t centos /bin/bash
docker exec -it f41d95a52943 /bin/bash(进入容器里面)
ifconfig(如果没有这个语句yum install net-tools 安装)——eth0(宿主)inet 172.17.0.1(对外ping百度等网站可以ping通)
(当重启container的时候,你就会发现,ifconfig命令又没有了,默认是不会为我们保存修改的,所以需要我们提交对image的修改。在宿主机中查询容器id,然后提交修改)

docker ps -l
docker start 4e108c90fa11
docker exec -it 4e108c90fa11 /bin/bash
yum install net-tools -y
退出,宿主机上完成以下指令
docker commit -m="add net-tools packages,nclude ifconfig command" 4e108c90fa11
现在重新启动刚才的container,连上去试试ifconfig,就会发现ifconfig已经保存在image中了。

11、
Docker容器连接
端口映射并不是唯一把 docker 连接到另一个容器的方法。

docker有一个连接系统允许将多个容器连接在一起,共享连接信息。

docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。

猜你喜欢

转载自blog.csdn.net/qq_34955908/article/details/80559975
今日推荐