docker实例操作
很多东西都是借鉴各位⼤神的,也不知道具体是谁或是哪个链接,很抱歉
两者同为⽬前版本中个⼈和⼩团队常⽤的服务级操作系统,在线提供的软件库中可以很⽅便的安装到很多开源的软件及库。 两者都使⽤bash作为基础shell,所以在很多基础命令上,ubuntu与centos的差别不是很明显,⽽ubuntu在桌⾯界⾯上要做的更为出⾊,很多⼈如果是从兴趣出发⽽学习linux的⾸选⼀般都是ubuntu,毕竟很多⼈还是很习惯在桌⾯图形下操作的。Centos与Ubuntu的使⽤习惯和命令上还是有很多的不同,下⾯简单列举⼀下:
1. centos中新建的⾮root⽤户是没有sudo的权限的,如果需要使⽤sudo权限必须在/etc/sudoers 中加⼊账户和权限,所以切换到root
账号的时候只需要输⼊:su,加⼊root账号的密码即可。 在Ubuntu中,⼀般使⽤sudo+命令,如果是第⼀次使⽤会提⽰输⼊当前⽤户的密码(⽽不是root的密码)
2. 在线安装软件中,centos使⽤的是yum命令,⽽ubuntu中使⽤的是apt-get命令。除此之外yum中还有⼀个从软件源中搜索摸个软件
的⽅法:yum search + 软件名
3. centos是来⾃于RedHat,所以centos⽀持rpm格式的安装,⽽ubuntu显然是不⽀持的。
4. 毕竟是不同的公司做的不同的发⾏版,很多配置⽂件的位置和默认的⽂件路径都有很⼤区别,这个需要使⽤过程中慢慢体会了。
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/myf挂载到容器的/etc/mysql/myf
-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查看容器运⾏情况
8、
使⽤已有镜像创建⾃⼰的镜像
——⾸先进⼊运⾏的容器⾥⾯,再往容器⾥加⼊⼯具apache等,然后再commit为⾃⼰的镜像
docker exec -it 运⾏容器ID /bin/bash
docker重启容器命令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连接会创建⼀个⽗⼦关系,其中⽗容器可以看到⼦容器的信息。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论