docker run -name -h hostname #-h指定主机名
进入容器:docker exec|docekr attach|nsenter
[root@localhost ~]# docker run --name mynginx -it centos
进入正在进行的容器方法:
#! /bin/bash
# Use nsenter to access docker
docker_in() {
Name_Id=$1
PID=$(docker inspect -f "{{ .State.Pid }}" $Name_Id)
nsenter --target $PID --mount --uts --ipc --net --pid
}
docker_in $1
端口映射必须物理机本地端口没有启动,不然会被占用,映射不成功。
镜像存储位置:
[root@localhost sha256]# pwd
/var/lib/docker/image/overlay2/imagedb/content/sha256
[root@localhost sha256]# ll
总用量 12
-rw-------. 1 root root 6022 7月 14 17:57 3c5a051232223f9ccf4a604d611696e98392648c9e567d3ecd2af881c9f93101
-rw-------. 1 root root 2205 7月 14 17:05 49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5
[root@localhost sha256]#
容器生成新的镜像:
HOST网络模式:如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置 自己的 IP 等,而是使用宿主机的 IP 和端口
[root@localhost ~]# docker volume create -d local db_volume
[root@localhost ~]# docker run -it --name volume --volume /var/lib/docker/volumes/db_volume:/root/db centos /bin/bash
#容器的/root/db目录下
[root@ea512c460c7d /]# cd /root/
[root@ea512c460c7d ~]# cd db/
[root@ea512c460c7d db]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 14 15:13 _data
[root@ea512c460c7d db]# touch aa
[root@ea512c460c7d db]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 14 15:13 _data
-rw-r--r--. 1 root root 0 Jul 14 15:13 aa
[root@ea512c460c7d db]#
Docker 容器间数据共享:
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
$ docker run -it -v /dbdata --name dbdata ubuntu
root@3ed94f279b6f:/#
查看/dbdata目录:
root@3ed94f279b6f:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷.
例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:
$ docker run -it --volumes-fromdbdata --name db1 ubuntu
$ docker run -it --volumes-from dbdata --name db2 ubuntu
此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。