系统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
查看没有截取字段的完成信息,默认字符串太长会被截断