docker 常用操作
下面的命令加上括号的是新版本的命令,去掉括号是老版本的命令。
在任何命令后加:--help
,就会提示处这些命令的具体用法与参数。
docker命令 | 命令解释说明 |
---|---|
docker search | search the docker hub for images |
docker (image) pull | pull an images or a repository from a registry |
docker images/docker image ls | list images |
docker create | create a new container |
docker (container) start | start one or more stopped contrainers |
docker (container) run | run a command in a new container |
docker attach | attach to a running container |
docker ps/docker container ls | list contrains |
docker (container) logs | fetch tho logs of a container |
docker restart | restart a container |
docker (container) stop | stop one or more running containers |
docker kill | kill one or more running containers |
docker (image) rm | remove one or more image |
docker network ls | 查看docker使用的网卡 |
docker inspect | Return low-level information on Docker objects。查看某个运行中的contain的详细信息(里面有IP地址),参数是contain的名字(启动container时用--name选项指定的名字),也可以是image ID。 |
container里面运行的进程一定不能设置成是后台运行,如果是后台运行的话,container会立即自动终止。所以nginx container的话,里面启动nginx的命令一定有【-g】选项。
-
docker search:查找docker,比如查找nginx
在dockerhub网站上搜索nginx,在【TAG】标签里发现有很多版本。官方nigix docker里面装的操作系统好像是ubuntu,所以你下载的nginx的docker image里就有一个ubuntu系统,这个系统里好像除了nginx必要的依赖工具外,什么都没有装,但是也的40多M。
在众多版本里有一种的size最小是
xxx-alpine
,Alpine也是一个Linux的发行版,特定是体积小,nginx的alpine版本的size是8M左右。由于docker hub里的镜像都没有安装调试工具,所以,在真正的项目上,一般都是安装好调试工具,自己打包,做出一个image,然后上传的自己的私有docker hub上。
-
docker (image) pull:从docker hub上拉一个alpine系统下的稳定版本的nginx到本地
# docker image pull nginx:stable-alpine
-
docker images/docker image ls:查看本地安装了哪些的docker镜像
[root@localhost yum.repos.d]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx stable-alpine aaad4724567b 5 weeks ago 21.2MB
-
docker image rm:删除一个镜像文件。
-
docker (container) run:如果本地没有镜像文件,则会自动到仓库里下载。
$ docker container run --help Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS
需求1:如果要想和docker container交互,必须指定
-t
和-i
- -t:指定终端。
- -i:标识可以和docker container交互
需求2:给要启动的docker contain一个名字。
- --name:起名字。
需求3:让启动的container在后台运行(不占用当前shell进程)。
- -d: Run container in background and print container ID
需求4:当容器被停止stop后,想自动删除这个容器,达到
docker container ls -a
的结果里,没有这个容器的效果。-
--rm: 自动删除容器
例子:启动nginx
docker container run --name n12 --rm -d nginx:stable-alpine
用
sudo docker container ls
查看的结果如下,CONTAINER ID IMAGE COMMAND PORTS NAMES 6e63af9a4300 nginx:stable-alpine "nginx -g 'daemon of…" 80/tcp n12
- PORTS:nginx使用的端口和网络层协议的种类(这里是使用TCP协议)。
-
docker network ls:查看docker使用的网卡。有下面3个就OK。
[root@localhost yum.repos.d]# docker network ls NETWORK ID NAME DRIVER SCOPE d410575399eb bridge bridge local a36f938bc6c6 host host local 55ee9a442ee8 none null local
安装完docker后,使用
ifconfig
,可以发现多出个docker0
网卡,IP是172.17.0.1。这个网卡的连接方式是【NAT bridge】,既不是【NAT】,也不是【bridge】。container里的进程要想和外网通信的话,要通过别的网卡(enp0s3)才可以。docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:5b:c3:2c:80 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.65.81 netmask 255.255.255.0 broadcast 192.168.65.255
container启动后,里面操作系统的网段就是172.17的
例子:启动busybox
# docker container run --name b1111 -it busybox
然后在busybox里面运行
ifconfig
命令,发现ip地址是172.17.0.2
,和网卡docker0在同一个网段。然后再运行:
docker container ls
,就可以看到在names的地方是b1111。CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f0f38cba6c5b busybox "sh" 5 minutes ago Up 5 minutes b1111
- CONTAINER ID:一个ID
- IMAGE:哪个image
- COMMAN:当前镜像里运行的是什么进程
-
docker container start:启动container
Usage: docker container start [OPTIONS] CONTAINER [CONTAINER...] Start one or more stopped containers Options: -a, --attach Attach STDOUT/STDERR and forward signals --checkpoint string Restore from this checkpoint --checkpoint-dir string Use a custom checkpoint storage directory --detach-keys string Override the key sequence for detaching a container -i, --interactive Attach container's STDIN
-
docker container stop:停止container
-
docker container rm :删除container,参数是container的名字。删除后用
docker container ls -a
也看不到这个container。如果是stop一个container,那么用docker container ls -a
还是可以看到这个container的。 -
docker (container) logs:查看container中进程产生的日志内容。比如查看nginx的日志。然后把日志直接输出到控制台。
# docker container logs n12 172.17.0.1 - - [30/Nov/2019:08:52:19 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
-
docker container exec:直接执行container里的命令。
Usage: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach Detached mode: run command in the background --detach-keys string Override the key sequence for detaching a container -e, --env list Set environment variables -i, --interactive Keep STDIN open even if not attached --privileged Give extended privileges to the command -t, --tty Allocate a pseudo-TTY -u, --user string Username or UID (format: <name|uid>[:<group|gid>]) -w, --workdir string Working directory inside the container # docker container exec -it kv1 /bin/sh
docker container状态转换图:
- docker inspect :后面接container id后者image id。查看详细信息,比如image启动后,运行哪个命令。
下面的nginx的cmd和OS
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"Os": "linux",
【daemon off】是让nginx不作为守护进程运行,要是作为守护进程运行的话,container会自动结束。