Docker容器的基础操作

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#查看容器状态
docker stats
#使用镜像启动容器并进入容器
docker run -it ubuntu /bin/bash
#查看所有容器
docker ps -a
#查询运行的容器
docker ps
#或者
docker container ls
#启动一个已停止的容器
docker start <container_id>
#后台运行
docker run -itd --name ubuntu-test ubuntu /bin/bash
#停止容器
docker stop <container_id>
#停止的容器可以通过 docker restart 重启
docker restart <container_id>
#进入容器
docker exec -it <container_id> /bin/bash
#导出容器快照
docker export <container_id> > ubuntu.tar
#保存容器
docker commit <container_id> <image_name>
#创建镜像
docker build -t blog .
#复制文件到容器
docker cp . <container_id>:/home
#保存镜像到本地
docker save -o backup.tar <image>
#加载镜像到Docker
docker load --input backup.tar
#Docker内不能运行服务-以特权模式运行容器
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
#清理不带标签的镜像
docker rmi -f $(docker images |grep "<none>" | awk "{print \$3}")

docker run 命令参数

语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name=“nginx-lb”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=“ritchie”: 设置环境变量;
  • –env-file=[]: 从指定文件读入环境变量;
  • –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • –link=[]: 添加链接到另一个容器;
  • –expose=[]: 开放一个端口或一组端口;
  • –volume , -v: 绑定一个卷

docker build 命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@iCyrene ~]# docker build --help

Usage: docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--network string Set the networking mode for the RUN instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of the image
-q, --quiet Suppress the build output and print image ID on success
--rm Remove intermediate containers after a successful build (default true)
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
-t, --tag list Name and optionally a tag in the 'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default [])

创建MySql容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#设置镜像加速
#拉取镜像
docker pull mysql
#创建容器
#-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
#-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
#进入容器
docker exec -it mysql /bin/bash
#登录Mysql
mysql -u root -p
#查看状态
mysql> status;
#进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)
mysql> GRANT ALL ON *.* TO 'root'@'%';
#刷新权限
mysql> flush privileges;
#此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则
#更改加密规则
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新root用户密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新权限
mysql> flush privileges;
#退出数据库
mysql> exit;
#退出容器
1
2
3
4
5
6
7
8
9
10
11
12
docker pull mysql

docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
docker exec -it mysql /bin/bash
mysql -u root -p

GRANT ALL ON *.* TO 'root'@'%';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
exit;
1
2
#docker mysql5.7
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7

windows宿主机与虚拟机中的容器连接

1
#添加宿主机到Docker的路由

本机安装

1
2
3
4
5
6
7
8
9
10
11
12
# 安装java
yum install -y java
# 添加Jenkins库到yum库,Jenkins将从这里下载安装。
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
#安装
yum install -y jenkins
#配置端口
vi /etc/sysconfig/jenkins
JENKINS_PORT="8080" #此端口不冲突可以不修改
#启停
service jenkins start/stop/restart