对docker的一点理解

系统centos

安装

http://www.runoob.com/docker/centos-docker-install.html
依赖项中的lvm2是LVM2不是1VM2,,,,,,小写的L,不是数字1

 

yum安装方式如果提示Another app is currently holding the yum lock

说明yunm进程有冲突,将其结束掉即可
ps -A | grep yum
 11924 ?        00:00:02 yumBackend.py
关闭这个进程,或等他结束
kill -s 9 11924

docker命令使用前最好su - root一下,或者每次使用docker命令的时候带上sudo ,sudo docker。。。。

启动docker服务,不然docker命令也用不了

service docker start

服务名叫docker,命令也叫docker,虽然安装的是docker-ce

 

下载镜像,以mysql为例

docker search mysql查找mysql的docker
docker pull mysql下载mysql的docker
docker images可以查看到myql
docker run --name mysql-123 -e MYSQL_ROOT_PASSWORD=123456 mysql
-e是配置信息,设置密码后才能进入
mysql是镜像名称

这样只是让docker中的mysql跑起来了,但并不能控制,要控制可以远程连接进去,也可以进入这个docker里面的终端,

进入mysql的docker终端
docker exec -it containerID /bin/bash
mysql的docker提供了/bin/bash所以才能进入

containerID可以通过

docker ps -a

命令查看

 

进入新终端后,命令行的开头会改变root@18ad738a67ad:/#

18ad738a67ad就是container的id

此时可以直接进入docker中的mysql命令行

mysql -u root -h localhost -p
输入密码,也就是进入docker时-e设置的密码

 

mysql的docker中没有vim命令,没有ps命令,用起来不方便

apt-get install vim又失败,

执行

mv /etc/apt/sources.list /etc/apt/sources.list.bak

备份一下原来的sources.list

然后把下面的内容
deb http://centos.bitcomm.cn/ubuntu trusty main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-security main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-updates main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-backports main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-proposed main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-security main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-updates main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-backports main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-proposed main restricted universe multiverse
用echo的方式输入到/etc/apt/sources.list,

也可以在真实系统中编辑好,然后用docker cp的方式拷贝到docker容器中去

docker cp ./sources.list  containerID:/etc/apt/sources.list

更新apt-get源

apt-get update 

apt-get install -y vim

过程中可能会有几次failed,但是不影响

ps命令不能apt-get install ps

因为包名不叫ps而叫procps

apt-get install procps

就可以使用ps命令了

 

小贴士:

1.

docker run  = docker create + docker start

docker run 要带上一行需要执行的命令,除非镜像自己有配置默认执行的命令

docker create也要带上命令,docker create每次都会根据image创建出一个新的container,然后要手动docker start才会启动,启动的时候就不能带命令了

所以同一个镜像里同一个命令最好只执行一次docker run,docker 运行结束后(或者手动docker stop以后)其他时候用docker start再次启动。因为每次docker run都会调用一次docker create,导致container越来越多

2.

我们不能操作image,但是我们可以根据image创建容器,然后对容器进行修改,

docker cp   containerID:/hello ./

docker cp ./ containerID:/

用docker cp复制,甚至覆盖原container中的image中的内容,image并不会被修改,

然后docker commit containerID newImage

可以将容器创建一个新的image,然后可以再次对这个新建的image进行create、run操作。

3.

自己写一个hello.c语言文件,gcc编译后,docker cp复制到hello-world的container中,然后发布为一个image,然后run image执行这个hello程序,默认是执行不起来的,因为官方提供的hello-world里面的hello是一个静态的程序,可以复制出来然后ldd查看

ldd ./hello

发现并没有链接动态库,但是自己编写的hello程序链接了最少3个so,

[root@bogon test]# ldd hello.out
	linux-vdso.so.1 =>  (0x00007ffcc1baf000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f1efdeee000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1efe2bb000)

但官方提供的hello

[root@bogon test]# ldd ahello
	not a dynamic executable

静态编译

gcc -static hello.c

如果报错
/bin/ld: cannot find -lc
是因为没有安装静态库
安装命令
yum install glibc-static

4.

查看docker配置

docker inspect containerID

如果不知自己的image,运行起来的container一般只需要看

path

args

ExposedPorts

env

这些运行相关的,其他的什么时候用到我也不知道

5.

docker相关原理,可以自行搜索linux、namespace

docker内程序运行依赖linux-vdso.so.1,可以自行搜索vdso

6.

sudo docker ps -a --no-trunc

查看没有截取字段的完成信息,默认字符串太长会被截断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值