虚拟化,容器的理解
2019-04-12 本文已影响0人
赛亚人之神
要想使用 linux 容器,至少 linux 内核要支持 namespaces,cgroups(control groups),可以在用户空间,使用一些工具,并利用linux内核所提供的这些技术,从而实现容器运行。
docker 在容器运行、使用简化的道路上更进一步,提供了镜像(而且是分层构建镜像),使得容器技术的使用更加被简化
docker 程序环境:
环境配置文件:
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage
/etc/sysconfig/docker
unit file:
/usr/lib/sytemd/system/docker.service
Docker Registry 配置文件
/etc/containers/registries.conf
----------------------------- 上面的环境我安装完 docker-cn 后并未在相关路径下找到,有待确认 ----------------------------
docker-ce
配置文件: /etc/docker/daemon.json
docker 镜像加速
docker cn
阿里云加速器
中国科技大学
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
注意:registry-mirrors 的值是个数组,可以配置多个
alpine: 镜像的微型发行版,提供了程序运行的基础环境,但是体积非常小,(缺点:缺少调试工具,建议在测试中使用)
docker image
作用: Manage images
语法: docker image COMMAND
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
docker container
作用: Manage containers
语法: docker container COMMAND
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers
logs Fetch the logs of a container
ls List containers
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
run Run a command in a new container
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
docker run:
作用:Run a command in a new container
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options:
-a, --attach list Attach to STDIN, STDOUT or STDERR 【附加到标准输入,标准输出,标准错误输出】
-d, --detach Run container in background and print container ID 【容器在后台运行)
-e, --env list Set environment variables【设置环境变量】
-h, --hostname string Container host name 【设置容器主机名】
-i, --interactive Keep STDIN open even if not attached 【始终保持标准输入打开】
-l, --label list Set meta data on a container【设置容器元数据】
--name string Assign a name to the container,【指定容器名称】
--network string Connect a container to a network (default "default") 【指定网络 默认是 bridge】
--rm Automatically remove the container when it exits 【当容器停止后自动删除容器,英文说明有问题】
-t, --tty Allocate a pseudo-TTY,【分配伪终端】
-v, --volume list Bind mount a volume 【指定卷】
-w, --workdir string Working directory inside the container 【指定工作目录】
可以使用 docker network ls 查看所有网络信息
docker network
作用:Manage networks
语法:docker network COMMAND
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
例子:
1、 下载一个 busybox 镜像,并在 busybox 中使用 httpd 命令启动一个 web 服务,打印出 hello docker
docker image pull busybox:latest
docker run --name b1 --rm -it busybox:latest
注意:这里启动容器时使用了 --rm 选项,意思是容器停止后容器会自动被删除
在 busybox 交互式命令中,创建 httpd 所需的文件
mkdir /home/data -p
echo "hello docker" > /home/data/index.html
httpd -f -h /home/data/
备注:
httpd:
所用: Listen for incoming HTTP requests
-f Don't daemonize 【避免后台运行】
-v[v] Verbose
-p [IP:]PORT Bind to IP:PORT (default *:80)
-h HOME Home directory (default .) 【指定家目录位置】
启动好 httpd 服务后,使用 docker container inspect b1 查看【b1】容器的 ip 为 172.17.0.2
另外打开一个终端,使用 curl 172.17.0.2 看到控制台输出了 “hello docker”
2、 下载并运行一个名为 web1 的 nginx 容器
docker run --name -d web1
docker ps 查看所有运行中的容器
docker inspect web1 查看容器的 ip 地址
curl 172.17.0.3 使用 curl 访问 ip,查看输出内容
3、 下载并运行一个名为 redis 的容器
docker run --name redis -d redis
docker ps
docker exec -it redis /bin/sh 执行 reids 容器中的 /bin/sh 程序
redis-cli 运行 redis-cli,测试可以正常对 redis 进行操作
注意:
docker exec
作用:Run a command in a running container
语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
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
4、 使用 docker logs web1 查看容器的日志
基于容器创建镜像,使用 docker commit 指令
作用: Create a new image from a container's changes
语法: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Options:
-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
例子:创建 nginx 容器,将其重新打成镜像,tag号为v1
1. docker commit -p web1 nginx:v1
2. docker commit -p web1
docker tag conatiner-id ngixn:v1
使用 docker inspect busybox 查看 busybox 的默认运行的程序是位于 /bin 下的 sh,如何修改呢?
修改镜像默认的运行程序: 使用 -c 选项
docker commit -p -c 'CMD ["/bin/httpd","-f","-h","/home/data"]' b1 mybusybox:v3
docker push
语法: docker push [OPTIONS] NAME[:TAG]
作用:Push an image or a repository to a registry
Options:
--disable-content-trust Skip image signing (default true
docker login
语法: docker login [OPTIONS] [SERVER]
作用:Log in to a Docker registry
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username